OnItemClickListener не работал с флажком?

У меня есть такой макет элемента, и я устанавливаю фон с помощью селектора элементов.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@drawable/itemselector"
android:orientation="horizontal" >
<CheckBox
    android:id="@+id/message_row_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/message_row_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold"
        android:textColor="@color/black" />

элементыселектор.xml :

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
 android:state_pressed="true" 
 android:drawable="@color/yellow" />
<item 
 android:state_selected="true" 
 android:drawable="@color/green" />
<item 
 android:drawable="@color/white" />
</selector>

У меня есть ListView, который будет содержать некоторые элементы. Затем я использовал setOnItemClickListener(), но это не сработало. Я обнаружил, что если я уберу флажок в пункте, все будет в порядке.

В чем была проблема между флажком и слушателем здесь? Можете ли вы дать мне какое-нибудь решение?

Обновление: это код слушателя

mainListView.setAdapter(messageAdapter);
mainListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                        Message p = (Message) arg0.getItemAtPosition(arg2);
                        Toast.makeText(TarsiusActivity.this, p.getTitle(), Toast.LENGTH_LONG);
                        Log.i("Item Clicked", p.getTitle());
                    }
});

ps: я хочу сделать почтовый ящик как gmail на андроиде. В каждой строке есть флажок, и пользователь может щелкнуть элемент, если хочет увидеть сообщение.


person TrungNguyen    schedule 28.03.2012    source источник
comment
Пожалуйста, покажите код, который вы использовали для установки onClickListener().   -  person PearsonArtPhoto    schedule 28.03.2012
comment
возможный дубликат ListView OnItemClickListener не отвечает?   -  person Heath Borders    schedule 12.04.2014
comment
возможный дубликат OnItemClickListener не работает с элементом ListView, содержащим кнопку   -  person Narkha    schedule 15.05.2015


Ответы (5)


OnItemClickListener для listView не будет работать, если у вас есть какие-либо интерактивные элементы, такие как кнопки, ImageButton, Checkbox и т. д. в listView. Добавлять

mainListView.setItemsCanFocus(true);

См. ListView OnItemClickListener не отвечает?

person user936414    schedule 28.03.2012

Лучший способ сделать это — установить следующие свойства для флажка:

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

У меня была такая же проблема, и я сделал это.

person silentkratos    schedule 07.04.2013
comment
Работать, если отключить галочку! - person TacB0sS; 19.08.2013
comment
Работай и у меня. Спасибо - person Guillaume Ilitch Tchaïkovsky; 19.11.2015

Просто добавь

android:descendantFocusability="blocksDescendants"

На ваш верхний уровень LinearLayout элемента списка.

person brendan    schedule 15.08.2013

Вы можете добавить этот код в свой метод OnItemClickListener:

public void onItemClick(AdapterView parent, View view, int position, long id){
   CheckBox box = (CheckBox)view.findViewById(R.id.course_search_checkbox);
   box.setChecked(true);
}
person Pradeep Sodhi    schedule 28.03.2012
comment
спасибо за ваше решение, но вы использовали GMAIL на Android? :) - person TrungNguyen; 28.03.2012
comment
да ... во входящих, если вы нажмете на флажок, для вас будет какой-то вариант, НО если вы нажмете на остальные, откроется сообщение. Что я и хотел ;) - person TrungNguyen; 28.03.2012
comment
во-первых, вы должны сделать так, чтобы ваши параметры отображались в том же xml, выравнивание которого равно parentbottom. В onCreate вашей активности установите видимость всего представления параметров, чтобы оно исчезло. Затем, когда вы нажмете флажок, затем установите видимость вашего представления параметров в вашем onItemClick. - person Pradeep Sodhi; 28.03.2012
comment
Это неправильное решение, потому что после проверенного элемента списка он не может удалить значение флажка. - person Arpit Patel; 16.06.2016

Используйте setOnCheckedChangeListener вместо onItemClickListner для флажка

CheckBox check;
check=new CheckBox(this);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO Auto-generated method stub
    }
});
person Pradeep Sodhi    schedule 28.03.2012
comment
есть ли другое решение? Я хочу, чтобы это выглядело как gmail на Android. По-прежнему есть флажок, и если пользователь нажимает на элемент, если он хочет прочитать сообщение - person TrungNguyen; 28.03.2012