Как установить Genaral onCLick для представлений в формате XML в Android? - PullRequest
3 голосов
/ 14 октября 2019

Мое приложение имеет 17 ImageButtons , каждое из которых имеет изображение животного, и если пользователь нажимает на него. Этот голос животного воспроизводится для пользователя.

Как я уже сказал, у меня есть 17 ImageButtons. Если я хочу установить OnClickListener для каждого из них. Я должен написать button.setOnCLickListenr(/*implementation*/); или button.setOnCLickListenr(this);* (в рамках реализации интерфейса View.OnCLickLIstener) 17 раз .

Мои кнопки не расположены рядом друг с другом, поэтому я не могу использовать RecyclerView , ListView или GridLayout .

Есть ли способ уменьшить количество OnClickListener с 17 раз до меньшего. или просто используйте setOnClickListener метод один раз

Спасибо ...

Ответы [ 4 ]

3 голосов
/ 16 октября 2019

Выполните следующие шаги, это поможет вам.

Первое: Определите android:onClick="animalOnCLick" для каждой из кнопок ImageButton. Эти атрибуты заставляют android выполнять определенный публичный метод ( !!! note: ваш метод должен быть public ), когда onCLick событие происходит на пользовательском устройстве.

Макет Реализация

   <ImageButton
        android:id="@+id/btn_cow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cow"
        android:onClick="animalOnCLick" <!-- Added -->
        <!-- rest of imageButton attributes
        />
      <!-- other ImageButtons-->

Секунда: Объявить открытый метод с тем же именем, которое вы задали перед andorid: OnClick атрибут и передать аргумент, который имеет тип View

public void animalOnCLick(View view) {
    /* your implementation*/
}

Третий: Тогда получить Текущий нажатый идентификатор просмотра , который на самом деле является текущим идентификатором по нажатию кнопки ImageButton с view.getId()

И реализуйте свою уникальную реализацию для каждой из кнопок ImageButton, как показано ниже

    public void animalOnCLick(View view) {
      switch (view.getId())
      {
          case R.id.btn_cow:
              /*Cow onCLick implementation*/
              break;
          case R.id.btn_goat:
              /*Goat onCLick implementation*/
              break;
      /*Other ImageButtons      
    }
}
3 голосов
/ 14 октября 2019

вы можете использовать библиотеку Butterknife , проверьте пример:

@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void onClicked(View view) {
   // do something 
}
2 голосов
/ 14 октября 2019

Вы можете создать один OnClickListener и установить его для всех ваших ImageViews.

Пример:

public OnClickListener onClickListener {
   @Override
   public void onClick(View view){
      // Identify every imageview by its id 

   } 
}


imageview1.setOnClickListener(onClickListener)
imageview2.setOnClickListener(onClickListener)
imageview3.setOnClickListener(onClickListener)
0 голосов
/ 14 октября 2019

Вы можете попробовать вот так вместо создания внутреннего класса в каждом клике

 @Override
 public void onClick(View v) {
       int i = v.getId();
        switch (i){
            case R.id.btn1 :
                break;
            case R.id.btn2 :
                break;
        }
  }
...