@SashaDown
Студент

Почему OnClick вызывается по нажатию на пространство между кнопками?

Я новичок, пишу первое приложение на Android на языке Java. (Android Studio 4.0)

Работаю с RecyclerView. Внутри адаптера в классе холдер добавил OnClickListener и описал onClick. Столкнулся с проблемой, что при нажатии на кнопку должны производиться действия, содержащиеся в onClick, но это происходит при нажатие на пространство между кнопками. Нажатие на кнопку игнорируется. Если нажать на пространство над второй кнопкой, то при запросе позиции возвращает единицу. Пробовал убирать пространство между кнопок, но и в этом случае нажатие на кнопку игнорирует. Я более, чем уверен, что допустил глупую ошибку.
Буду благодарен помощи с моим говнокодом.
ListAdapter.java
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder>{
    ArrayList<Catalogue> catalogue;
    public ListAdapter(ArrayList<Catalogue> catalogue){
        this.catalogue = catalogue;
    }
    class ListViewHolder extends RecyclerView.ViewHolder{
        Button button;
        public ListViewHolder(@NonNull View itemView) {
            super(itemView);
            button = (Button) itemView.findViewById(R.id.button_of_list);
            itemView.setOnClickListener(new View.OnClickListener() {  // добавляю слушателя
                @Override
                public void onClick(View v) {
                    CreateNewListOfButton.CreateButton( "154/", "2/"); // действие
                }
            });
        }
    }
    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.button_list, parent, false);
        return new ListViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
            holder.button.setText(catalogue.get(position).getTextForButton());//Добавление текста в кнопку
    }
    @Override
    public int getItemCount() {
        return catalogue.size();
    }
}

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
     >

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/list_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </androidx.recyclerview.widget.RecyclerView>
</FrameLayout>

button_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/button_of_list"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="#1f4b99"
        android:textColor="#f1fcff"
        android:focusable="false"
        android:focusableInTouchMode="false"
        ></Button>
</LinearLayout>
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Потому что ты поставил листенер не на кнопку, а на айтемВью. Поставь на кнопку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы