複数のボタン用の1つのオンクリックハンドラー
-
05-10-2019 - |
質問
私はいつもこのようなことをしていることに気づきます:
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(menuButtonListener);
button2.setOnClickListener(menuButtonListener);
button3.setOnClickListener(menuButtonListener);
...
と
private OnClickListener myButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1 :
...
OnClickListenerを設定するより良い方法はありますか?
解決
Android:onClick属性を使用して、レイアウトXMLに設定することもできます。
android:onClick="onClick"
次に、アクティビティクラスでOnClickメソッドを追加します。
public void onClick(View v) {
...
これが次のとおりです ドキュメンテーション.
他のヒント
クラスに「view.onclickListener」を実装してもらいます
public class MyActivity extends Activity implements View.OnClickListener {
Button button1, button2, button3;
@Override
public void onCreate(Bundle bundle) {
super.onCreate();
...
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button1:
// do stuff;
break;
case R.id.button2:
// do stuff;
break;
...
}
}
gettin @foenixの回答、あなたは単に次のようなことをすることができます:
int[] buttons = {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7
, R.id.button8, R.id.button9};
for (int i = 0; i < buttons.length; i++) {
Button buttonNum = (Button) rootView.findViewById(buttons[i]);
buttonNum.setOnClickListener(doSomething);
}
private OnClickListener doSomething= new OnClickListener() {
@Override
public void onClick(View v) {
//doSomething
}
};
注意すべきこと
android:onclick="onClick"
少なくともアンドイドSDK 1.6が必要です。そのため、アプリをできるだけ多くのオーディエンスにアクセスできるようにしたい場合は、おそらくAndroid 1.6に対してアプリを書きたいと思うでしょう。アプリには1.6+でのみ利用可能な機能が必要な場合を除きます。したがって、最初の試みはもう少し作業ですが、より大きな後方互換性があります。私は通常、私のアプリ1.5をcomptaibleに保つために、あなたがするようにそれをします。
編集:プロジェクト設定でSDKとしてAndroid 2.2をセットアップしたが、コンパイラエラーが発生しないためMinSDKバージョンを3(1.5)に設定すると、これを見落とすのは簡単です。
偶然にも、あなたのボタンがアクティビティではなくfragmentdialogなどにあるとき、これは役立つと思います
Context mContext = getActivity().getBaseContext();
mRes = mContext.getResources();
String[] idOfButtons = { "button1", "button2", "button3"};
for (int pos = 0; pos < idOfButtons.length; pos++) {
Integer btnId = mRes.getIdentifier(idOfButtons[pos], "id",(getActivity()).getBaseContext().getPackageName());
ImageButton ib = (ImageButton) v.findViewById(btnId);
ib.setOnClickListener(this.onClickNum);
}
クリックリスナーのコードを減らしたい場合は、このlibを持っています[http://jakewharton.github.io/butterknife/
あなたはこれをする必要があります
@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void doSomething(View button) {
//do whatever you want
button.changeWhateverInTheView();
}
所属していません StackOverflow