Подтвердить что ты не робот

SetOnItemClickListener() не работает на пользовательском ListView @Android

Я реализовал пользовательский ListView, расширив LinearLayout для каждой строки. Каждая строка имеет небольшой эскиз, текст и check box. list view развернут правильно, и я могу прокручивать и пропускать его без каких-либо проблем.

Но ListView вообще не реагирует на setOnItemClickListener(), поэтому мне пришлось найти обходной путь, установив кнопку прослушивания в getView() текста внутри каждой строки, что, очевидно, создает проблему, когда Я пытаюсь повторно использовать adapter. У кого-нибудь есть решение?

4b9b3361

Ответ 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

Ответ 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);