SetOnItemClickListener() не работает на пользовательском ListView @Android
Я реализовал пользовательский ListView
, расширив LinearLayout
для каждой строки. Каждая строка имеет небольшой эскиз, текст и check box
. list view
развернут правильно, и я могу прокручивать и пропускать его без каких-либо проблем.
Но ListView
вообще не реагирует на setOnItemClickListener()
, поэтому мне пришлось найти обходной путь, установив кнопку прослушивания в getView()
текста внутри каждой строки, что, очевидно, создает проблему, когда Я пытаюсь повторно использовать adapter
. У кого-нибудь есть решение?
Ответы
Ответ 1
Попробуйте это
Для ListView,
final ListView list = (ListView) findViewById(R.id.list);
list.setItemsCanFocus(false);
Кроме того, убедитесь, что для элемента CheckBox внутри элемента списка задано значение false
android:focusable="false"
android:focusableInTouchMode="false"
Ответ 2
старый ответ: я писал в предыдущем посте здесь
android:focusable="false"
android:clickable="false"
не поможет, когда ImageButton находится в пользовательском представлении. В течение времени выполнения (из исходного кода Java) необходимо использовать button.setFocusable(false);
Изменить: Есть еще более элегантное решение. Попытайтесь добавить android:descendantFocusability="blocksDescendants"
в корневой макет элемента списка. Это сделает клики onListItem возможными, и по отдельности вы можете обрабатывать клики Button или ImageButton
Ответ 3
Для ListView, где вы устанавливаете представления элементов в CheckBox
android:focusable="false"
android:clickable="false"
http://code.google.com/p/android/issues/detail?id=3414
Ответ 4
Создал ли какой-либо ViewHolder в расширенном классе адаптера? Если да, то создайте экземпляр вашего этого заполнителя в setOnItemClickListener(), что-то будет работать так.
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
View rowView = v;
if (rowView == null) {
LayoutInflater inflater = this.getLayoutInflater();
// GET INFLATE OF YOUR LAYOUT.
rowView = inflater.inflate(R.layout.projectpeopledescrate, null);
// CUSTOM ViewHolder Class Created in Adapter.
// name,title,comment are my components on the same listview clicked item.
PPDViewHolder viewHolder = new PPDViewHolder();
viewHolder.name = (TextView) rowView.findViewById(R.id.ppeopledescrvname);
viewHolder.title = (TextView) rowView.findViewById(R.id.ppeopledescrvtime);
viewHolder.comment = (TextView) rowView.findViewById(R.id.ppeoplervcomment);
viewHolder.hiddenLayout = (RelativeLayout) rowView.findViewById(R.id.hiddenCommentPanel);
rowView.setTag(viewHolder);
}
// ANOTHER object instance to apply new changes.
PPDViewHolder holder = (PPDViewHolder) rowView.getTag();
// I've setted up visibility over the components. You can set your onClickListener over your buttons.
holder.comment.setVisibility(View.GONE);
holder.name.setVisibility(View.GONE);
holder.title.setVisibility(View.GONE);
holder.hiddenLayout.setVisibility(View.VISIBLE);
holder.hiddenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT));
holder.hiddenLayout.bringToFront();
}
Надеюсь, ты хочешь чего-то такого. Удачи!
Ответ 5
У меня есть этот код
this.mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.v(TAG,"loul");
}
});
Но это не сработало
Итак, у меня есть juste для включения onItemSelectedListener и он работает Oo:
this.mListView.setItemsCanFocus(false);
this.mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Log.v(TAG,"loul");
}
});
//listener for nothing but it allow OnItemClickListener to work
this.mListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Ответ 6
Установите эти свойства:
android:focusable="false"
android:focusableInTouchMode="false"
для всех элементов пользовательского интерфейса в файле list_item.xml.
если это не разрешено в вашем наборе адаптеров:
v.imageView.setFocusable(false);
v.imageView.setFocusableInTouchMode(false);