1

ボタンのサブクラスであるオブジェクトの配列をコードで作成したいと考えています。

public class MyButton extends Button {
    private Context ctx;
    private int status;
    public MyButton(Context context) {
        super(context);
        ctx = context;
        status = 0;
    }

    private click() {
        status = 1;
        // OTHER CODE THAT NEEDS TO STAY HERE
    }
}

主な活動では、私はこれを行います:

public class myActivity extends Activity {
    private MyButton[] myButtons = new MyButton[100];

    @Override
    public onCreate(Bundle si) {
         super.onCreate(si);
         createButtons();
    }

    private void createButtons() {
         for (int w=0; w<100; w++) {
             myButtons[w] = new MyButton(myActivity.this);
             myButtons[w].setOnClickListener(new View.onClickListener() {
                  public void onClick(View v) {
                  // ... (A)
                  }
             });
         }
    }
}

ここで、ボタンがクリックされるたびに MyButton 内の click() メソッドが実行されるようにします。当たり前のようですが、私の目にはありません。

click() メソッドを public にして (A) から直接実行すると、myButtons[w].click() が静的ではなく、そこから実行できないため、エラーが発生します。

それまでの間、クリックをインターセプトしてそこから click() を実行するコードを MyButton クラスのどこに置くべきか理解できませんでした。onClick をオーバーライドする必要がありますか? または、onClickListener をオーバーライドする必要がありますか? または、他に何をすべきですか?

myButtons[] オブジェクトの 1 つがクリックされるたびに click() を実行するにはどうすればよいですか?

助けてくれてありがとう。

4

2 に答える 2

2

View vリスナーで取得したものをキャストしMyButtonて呼び出すことができますclick

private void createButtons() {
    View.OnClickListener listener = new View.onClickListener() {
        public void onClick(View v) {
            ((MyButton) v).click();
        }
     };
     for (int w=0; w<100; w++) {
         myButtons[w] = new MyButton(myActivity.this);
         myButtons[w].setOnClickListener(listener);
     }
}
于 2012-11-26T13:14:28.160 に答える
1

あなたは付け加えられます:

View.onClickListener onclick = new View.onClickListener() {
                  public void onClick(View v) {
                     ((MyButton)v).click();
                     //since v should be instance of MyButton
                  }
             };

アクティビティに次を使用します。

myButtons[w].setOnClickListener(onclick); 
//one instance of onclick is enough, there is no need to create it for every button

createButtons() で

しかし...なぜ、なぜボタンの配列がAndroidにListViewがあるのか​​...

于 2012-11-26T13:16:56.710 に答える