0

Androidを使用して、プログラムで動的にいくつかの要素(ボタンとテキストビュー)を追加しています。また、これらのボタンごとに setOnClickListener イベントを設定し、そのイベントからボタンのクリック時に何らかのアクションを実行する必要があります。

do
{
    EditText txt1 = new EditText(this);
    EditText txt2 = new EditText(this);
    Button showtxt = new Button(this);
    linearLayout.addView(showtxt );
    linearLayout.addView(txt1);
    linearLayout.addView(txt2);
    showtxt.setOnClickListener(new View.OnClickListener() 
    {
       public void onClick(View v) 
       {
           String aaa= txt1 .getText().toString();//HOW TO ACCESS txt1 and txt2 from here
           String bbb= txt2 .getText().toString(); 
       }
    }
}
while(somecondition)

私はアンドロイドにほとんど慣れていません。クリック コールバック関数で txt1 と txt2 にアクセスするにはどうすればよいですか?

4

1 に答える 1

1

クラス全体のスコープを持つ変数を定義する必要があります。

public class Example extends Activity {
    EditText txt1;
    EditText txt2; 

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        txt1 = new EditText(this);
        txt2 = new EditText(this);
        ...

これで、onClick 関数が と を参照できるようにtxt1なりtxt2ます。

あるいは

txt1多くの LinearLayoutを1 つの LinearLayoutで作成しているように見えるのでtxt2、Button に EditTexts への参照を渡すことができます。

do {
    ...
    // EditText[] array = { txt1, txt2 };
    //  is the short version of
    EditText[] array = new EditText[2]; 
    array[0] = txt1;
    array[1] = txt2;

    showtxt.setTag(array);
    showtxt.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
           EditText[] array = (EditText[]) v.getTag();
           String aaa = array[0].getText().toString();
           String bbb = array[1].getText().toString();
           Log.v("Example", aaa + " " + bbb);
       }
    });
} while(some condition)

これは理想的ではないかもしれませんが、これ以上のコンテキストがなければ、最終的な目標を推測することはできません. それが役立つことを願っています!

最後の提案

Button と 2 つの EditTexts を行と呼ぶと、各行を独自の ViewGroup または View に格納できます。各行に背景色を付けたいとします。

View row = new View(this); // or this could be another LinearLayout
row.setBackgroundColor(0x0000ff);

// Create and add the Button and EditTexts to row, as in row.addView(showtxt), etc
...
linearLayout.addView(row);

showtxt.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        View row = v.getParent()
        String aaa = ((EditText) row.getChildAt(1)).getText().toString();
        String bbb = ((EditText) row.getChildAt(2)).getText().toString();
        Log.v("Example", aaa + " " + bbb);
    }
});
于 2012-06-23T22:33:48.313 に答える