Вопрос

Я оказываюсь, что делаю такие вещи, как это все время:

    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?

Это было полезно?

Решение

Вы также можете установить его в своем макете XML с помощью атрибута Android: OnClick.

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"

Требуется по крайней мере иoid SDK 1.6. Поэтому, если вы хотите, чтобы ваше приложение было доступно максимально большой аудитории, вы, вероятно, хотите написать ваше приложение против Android 1.6. Если ваше приложение не требует функции, которая доступна только в 1.6+. Поэтому, хотя ваша первая попытка немного больше работы, она имеет большую обратную совместимость. Я обычно делаю это так, как вы делаете, чтобы мои приложения 1.5 на компанией оснащены.

Редактировать: Легко пропустить это, если вы настроите Android 2.2 в качестве SDK в настройках ваших проектов, но установите 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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top