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

OnItemClickListener не работает с элементом ListView, содержащим кнопку

У меня 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 событиям щелчка элемента.

Любые идеи, как преодолеть?

4b9b3361

Ответ 2

Если у вас есть элементы ImageButtons внутри элемента списка, вам нужно добавить:

android:descendantFocusability="blocksDescendants"

в элемент элемента корневого списка [например, корневой макет].

Затем в каждом элементе ImageButton в элементе списка вам нужно добавить:

android:focusableInTouchMode="true"

Это сработало для меня - но я использовал ImageButtons, а не стандартную кнопку.

Ответ 3

Я также столкнулся с той же проблемой, с которой я пытался установить android:focusable="false" в listview, но это не работает, поэтому я добавляю это в элемент listview. Например, в моем элементе listview у меня есть кнопка Toggle, которая создавала проблему, Я добавляю android:focusable="false" к кнопке Toggle, и listview снова запускает работу с клиентом.

Ответ 4

Добавьте следующую строку в список ListView

android:choiceMode="singleChoice"

или не забудьте установить следующие строки в текстовые поля макета

android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"

Ответ 5

У меня также была проблема с Button в моем ListView. К сожалению, просто установка фокуса на false для всех объектов моего адаптера не помогла мне.

Теперь у меня есть обходное решение.

В вашем адаптере создайте OnClickListener для кнопки (или другого объекта с кликом), если вы еще этого не сделали. В этом OnClickListener вы сами вызываете OnItemClickListener.

public void onClick(View v) {
    mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}

Это означает, что вам нужно будет предоставить вашему адаптеру доступ как к родительскому ListView, так и к OnItemClickListener.

Ответ 6

Вы можете подумать о том, чтобы написать свой OnTouchEvent в своем элементе listview и отправить правильное касание к вашему дочернему виду, кнопку.

Ответ 7

Если вы используете ListView в Activity, убедитесь, что у вас установлена ​​setOnItemClickListener()

myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener