Ответ 1
просто добавьте эту строку в представления элементов вместо самого спискаView
android:focusable="false"
проверьте более подробно об этом от Пользовательский ListView, не имеющий доступа к элементам Android
У меня ListView
с пользовательским Adapter
который поставляет View
в ListView
следующим образом:
public View getView(int position, View convertView, ViewGroup parent)
{
RelativeLayout.LayoutParams lineParams;
RelativeLayout line=new RelativeLayout(context);
TextView tv=new TextView(context);
tv.setText("Text in postion="+i);
lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
line.addView(tv, lineParams);
lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
//checkbox
CheckBox checkBox=new CheckBox(context);
lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
line.addView(checkBox, lineParams);
return line;
}
И где-то внутри ListView
есть setOnItemClickListener()
, который должен перехватывать события щелчка элемента. Моя проблема в том, что всякий раз, когда я пытаюсь добавить флажок к элементу, я не получаю никаких ответов от моего ListView
. Если я пропущу CheckBox
или любой другой Button
, он будет работать.
Я действительно застрял в этой проблеме, я пробовал все виды макетов, выравнивания, обертывания и т.д. - бесполезно. Похоже, CheckBox
помешает ListView
событиям щелчка элемента.
Любые идеи, как преодолеть?
просто добавьте эту строку в представления элементов вместо самого спискаView
android:focusable="false"
проверьте более подробно об этом от Пользовательский ListView, не имеющий доступа к элементам Android
Если у вас есть элементы ImageButtons внутри элемента списка, вам нужно добавить:
android:descendantFocusability="blocksDescendants"
в элемент элемента корневого списка [например, корневой макет].
Затем в каждом элементе ImageButton в элементе списка вам нужно добавить:
android:focusableInTouchMode="true"
Это сработало для меня - но я использовал ImageButtons, а не стандартную кнопку.
Я также столкнулся с той же проблемой, с которой я пытался установить android:focusable="false"
в listview, но это не работает, поэтому я добавляю это в элемент listview. Например, в моем элементе listview у меня есть кнопка Toggle, которая создавала проблему, Я добавляю android:focusable="false"
к кнопке Toggle, и listview снова запускает работу с клиентом.
Добавьте следующую строку в список ListView
android:choiceMode="singleChoice"
или не забудьте установить следующие строки в текстовые поля макета
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
У меня также была проблема с Button в моем ListView. К сожалению, просто установка фокуса на false для всех объектов моего адаптера не помогла мне.
Теперь у меня есть обходное решение.
В вашем адаптере создайте OnClickListener для кнопки (или другого объекта с кликом), если вы еще этого не сделали. В этом OnClickListener вы сами вызываете OnItemClickListener.
public void onClick(View v) {
mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}
Это означает, что вам нужно будет предоставить вашему адаптеру доступ как к родительскому ListView, так и к OnItemClickListener.
Вы можете подумать о том, чтобы написать свой OnTouchEvent в своем элементе listview и отправить правильное касание к вашему дочернему виду, кнопку.
Если вы используете ListView
в Activity
, убедитесь, что у вас установлена setOnItemClickListener()
myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener