#android #listview
#Android #listview
Вопрос:
Приведенный ниже макет предназначен для отдельного элемента ListView
. Я использую пользовательский адаптер курсора для заполнения. Я обрабатываю onItemClick
, и это работает. Но как только я добавляю кнопку внутри макета — onItemClick
больше не запускается. Как мне зарегистрировать всю строку onItemClick
и одновременно обрабатывать кнопку onClick
?
Я хочу разместить кнопку (прокомментированную ниже в XML), но я также хочу обработать щелчок по списку..
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<TextView android:id="@ id/tv_ordinal" style="@style/MyTextViewLabel.Black" android:textColor="@color/blue_end"/>
<ImageView
tools:ignore="ContentDescription"
android:id="@ id/iv_thumb"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:gravity="start"
android:paddingTop="10dp" />
<TextView android:id="@ id/tv_fileGId" style="@style/MyTextViewLabel.Black" android:textColor="@color/blue_end"/>
<!--<Button-->
<!--style="@style/MyClearButton"-->
<!--android:id="@ id/bt_delete"-->
<!--android:text="DELETE"-->
<!--android:layout_height="50dp"-->
<!--android:layout_width="wrap_content"-->
<!--android:onClick="deleteScannedItemButtonClick"/>-->
</LinearLayout>
Комментарии:
1. Вы можете попробовать установить OnClickListener в LinearLayout.
2. добавить
android:descendantFocusability="blocksDescendants"
вLinearLayout
Ответ №1:
Сначала сделайте один thing..do возможность фокусировки false на кнопке. После этого в вашем адаптере::
Добавить один интерфейс ::
public interface ClickListener{
void onBtnClicked(int position);
void onRowClicked(int position);
}
После этого выполните событие щелчка как для строки, так и для кнопки, например :::
holder.MyClearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onBtnClicked(position);
}
});
holder.convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onRowClicked(position);
}
});
Где mListener
будет объект ClickListener
, который вы передадите в конструктор адаптера при инициализации..
Таким образом, вы можете получить два метода в activity / fragment для них по отдельности..с помощью этих параметров позиции в методах .. вы можете получить это значение этого элемента строки..
Ответ №2:
Пожалуйста, попробуйте добавить эту строку к вашей кнопке в XML-файле:
android:focusable="false"
Проблема в том, что кнопка фокусируется на группе просмотра (строке элемента), в которой она находится. Это означает, что при нажатии на каждую строку всегда фиксируется событие, но, поскольку оно находится за пределами его области экрана, событие отбрасывается. Поэтому вам необходимо запретить кнопке захватывать фокус.