4

xml で 10 個のボタンを設定し、メイン アクティビティに追加しました。2つだけ示します。すべてのボタンは、変数とボタンの色を変更するだけです。すべてのボタンを単一の onclicklistener にグループ化し、スイッチを使用してどのボタンが押されたかを確認する方法はありますか。個別の onclicklistener を使用すると、ウエストスペースの割り当てのように見えます。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    f1 =(Button) findViewById(R.id.f1);
    f2 =(Button) findViewById(R.id.f2);

    f1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            clearbutton();
            f1.setBackgroundColor(Color.RED);
            intbtnSelect=0; 
        }
    });

    f2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            clearbutton();
            f2.setBackgroundColor(Color.RED);
            intbtnSelect=1;
        }
    });
4

8 に答える 8

8

に実装できOnClickListenerます Activity。例えば

public class MyActivity extends Activity implements View.OnClickListener {       
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        f1 =(Button) findViewById(R.id.f1);
        f1.setOnClickListener(this);

        f2 =(Button) findViewById(R.id.f2);
        f2.setOnClickListener(this);
     }
}

onClick メソッドを実装し、view.getId() に切り替える必要があります。

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.f1:
        // your code here
        break;
    case R.id.f2:
        // your code here 
        break;
    }
}
于 2013-07-19T13:08:27.980 に答える
0

私は同じ問題を抱えていますが、(少なくとも私にとっては)最良の解決策を見つけました。最初にボタンのリストを作成し、次にidのint配列を作成する必要があります

    Button[] listBtn = new Button[3];
    IntId[] idList = {R.id.btn1, R.id.btn2, R.id.btn3};

    for(int i = 0 ; i < listBtn.length ; i++)
        listBtn[i] = (Button) findViewById (idList[i]);

    for(Button btn:listBtn)
        btn.setOnClickListener(btnListener);

    .......

    private View.OnClickListener btnListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            for(int i = 0 ; i < listBtn.length ; i++){

                if(v.getId() == idArray[i]){

                    //do something
                    String str = "Button number : "+ i;
                    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
                }
            }

        }
    };

`

于 2016-04-20T09:21:51.543 に答える
0
public class ExampleActivity extends AppCompatActivity implements View.Onclicklistener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    f1 =(Button) findViewById(R.id.f1);
    f2 =(Button) findViewById(R.id.f2);
    Utils.setObjectOnClickListener(this, f1, f2);

@Override
  public void onClick(View view) {
    Intent intent = null;
    switch (view.getId()) {
      case R.id.f1: 
      // Do your code here
      break;
      case R.id.f2:
      // Do your code here
      break;
}

}

In your Utils.class define this method

public static void setObjectOnClickListener(View.OnClickListener listener, View... views) {
        for (View view : views) {
            view.setOnClickListener(listener);
        }
    } 
于 2016-12-10T15:53:15.767 に答える
0

あなたのxmlで、すべてのボタンで:

android:onclick="myClick"

あなたの活動で:

public void onClick (View v){
   Button clickedButton = (Button) v;
   //Do wathever you want with your Button
   clickedButton.setBackgroundColor(Color.RED);
   // and you could also switch(v.getId()) if really needed.
}

また、Blackbelt で提案されているように View.OnClickListener を実装することもできますが、それは好みによって異なります。

私は個人的に、できるだけクリーンな Java コードを維持したいと思っていますが、それはあなた次第です!

この2つの方法に良い悪いはないと思います。

于 2013-07-19T13:11:04.257 に答える
0

Activity を実装View.OnClickListenerしてから、 method を追加する必要がありますonClick(View view)

ボタンの作成中に、この行を追加するだけです

button.setOnClickListener(this)、ボタンがクリックされるたびonClick()に、アクティビティでメソッドが呼び出されるようにします。

onClick()メソッド 内に入ると、 を使用しview.getId()てクリックされたボタンを確認できます。

コード :

// onCreate() - ボタンを動的に作成するか、findViewById() を使用してボタンを見つけ、オンクリック リスナーを割り当てます。

for(int i = 0; i < MAX_BUTTONS; i++){
    // Create a button here
    button.setOnClickListener(this);
}

// onClick()

switch(view.getId(){
    case R.id.btn_one:
       // do something
       break;
    ...
}
于 2013-07-19T13:12:07.830 に答える