Android

ListView OnItemClickListener Not Responding?

ListView OnItemClickListener Не отвечает?

Я везде искал решение этой проблемы, но не могу понять, как это реализовать. Мой OnItemClickListener был каким-то образом отключен в моих ListView строках, потому что у меня есть ImageButton в макете строк, который берет на себя фокус. Я обнаружил множество вопросов, но ни один из них ни к чему меня не привел.

Я проверил этот вопрос, но не смог разобраться в нем. Мне просто нужен способ сделать строки интерактивными, чтобы я мог определять, когда нажата строка. Длительное нажатие и фокусировка работают нормально.

Переведено автоматически
Ответ 1

Вместо OnItemClickListener добавьте OnClickListener к каждому из ваших представлений, возвращаемых вашим адаптером. Вам нужно будет использовать setItemsCanFocus настройка вашего списка:

ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);

и тогда в вашем адаптере getView это приведет к появлению строки с возможностью кликабельности. Предполагается, что кнопка находится в расширенном формате xml.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(context, R.layout.cell, null);
view.setClickable(true);
view.setFocusable(true);
view.setBackgroundResource(android.R.drawable.menuitem_background);
view.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
new AlertDialog.Builder(context).setTitle("touched").show();
}

});
return view;
}
Ответ 2

установите свой ImageButton's атрибут:

android:focusable="false"

Потому что AbsListView.onTouchEvent проверьте child.hasFocusable().

Ответ 3

Я протестировал следующее решение на 8 и 16 уровнях SDK.

В getView()

setFocusable(false);
setClickable(false);

вместо того, чтобы устанавливать для них значение true в адаптере, getView() делает то, что, я думаю, требовал исходный вопрос, и означает, что OnItemClickListener вызывается, при условии, что OnClickListener не установлен в getView().

Я предполагаю, что все, что вы можете сделать в представлении, OnClickListener вы можете сделать так же легко в ListView's OnItemClickListener. (setOnClickListener в представлении неявно устанавливает вид интерактивным, что, по-видимому, предотвращает вызов ListViewсоответствующего OnItemClickListener.)

Поведение соответствует ожидаемому с точки зрения ImageButtonвизуального состояния при нажатии или переносе элемента.

Решение представляет собой небольшую иллюзию, поскольку нажимается именно элемент списка, а не ImageButton сам по себе, поэтому, если кнопка не занимает весь элемент списка, щелчок в другом месте элемента все равно приведет к тому, что состояние кнопки, доступное для рисования, будет отражать щелчок. То же самое для focus . Возможно, это цена, которую стоит заплатить.

Ответ 4

Это определенно сработает. Добавьте это в определение макета.

android:descendantFocusability="blocksDescendants" 

Нашел решение здесь

2023-06-13 02:38 java android listview