0

ボタンの動的配列があり、すべてのボタンのオンクリックを処理する方法を知りたいですか?

ありがとう

4

3 に答える 3

5

ボタンごとに新しいOnClickListenerを作成する必要はないと思います。すべてのボタンが単一のリスナーを共有できます。

private OnClickListener myListener = new OnClickListener() {
  public void onClick(View v) {
    Object tag = v.getTag();
    // Do something depending on the value of the tag
  }
};

...

for (int i=0; i < btns.length; ++i) {
  btns[i].setOnClickListener(myListener);
  btns[i].setTag(some_identifying_information);
}

もちろん、ボタンごとに一意のOnClickListenerを作成し、次のように利用することもできます。

for (int i=0; i < btns.length; ++i) {
  final Button btn = btns[i];
  btn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
      // do something depending on the value of btn, which you're allowed
      // to reference here because it was declared final above.
    }
  });
}
于 2012-08-03T19:01:36.667 に答える
2

単一のボタンで行うのと同じ方法...

オンクリック リスナーを設定します。配列がある場合は、次のようになります。

btns[0].setOnClickListener(new OnClickListener() {
    public void onClick(View v){
        //do something
    }
});

btns[1].setOnClickListener(new OnClickListener() {
    public void onClick(View v){
        //do something
    }
});
//etc.

それらすべてに同じことをさせたい場合は、次のように for ループを使用して配列をループできます。

for(int i = 0; i< btns.length; i++){
    btns[i].setOnClickListener(new OnClickListener() {
        public void onClick(View v){
            //do something
        }
    });
}

あなたが何をしているのか正確にはわかりませんが、ボタンの配列がある場合は、現在行っている方法ではなく、ListView などでアダプターを使用する必要がある可能性があります。

于 2012-08-03T16:15:26.973 に答える
1

いくつかのコードや説明がなければ、あなたの質問に本当に答えるのは難しいですが、ここにいくつかのヒントがあります:

リスナーに到達する前に、動的に作成された各ボタンがクリック イベントへの応答方法を認識していることを確認する必要があります。ボタンのメソッドを使用してsetTag、任意のオブジェクトをボタンにアタッチできます。このオブジェクトは、クリックされたときにボタンがどのように動作するかを表します。このオブジェクト (おそらくいくつかの定数値) として整数を使用するか、各ボタンに一意のデータが必要な場合は、ボタンがクリックされたときに必要な動作と必要なデータ (または少なくともそれへの参照) の両方を維持するクラスを作成します。 )。

次に、すべてのボタン クリックを処理する単一のリスナーを初期化できます。このリスナーのonClickメソッドに、分岐してすべてのクリック ケースを処理する条件を配置します。動的ボタンを作成するときに、すべての動的ボタンにこのリスナーを設定します。onClick の開始時にView、メソッドのパラメーターからタグを取得しonClick(このビューはクリックされたボタンになります)、それを使用して条件の分岐を決定します。

お役に立てれば。質問をより具体的にしていただければ、より詳細なサポートを提供できます。

于 2012-08-03T16:49:11.177 に答える