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" />

itemselector.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(), но он не работает. Я обнаружил, что если я удалю флажок в элементе, все будет okey.

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

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

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 на android. Каждая строка имеет флажок, и пользователь может нажать на элемент, если он хочет увидеть сообщение

Ответ 1

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

mainListView.setItemsCanFocus(true);

Обратитесь ListView OnItemClickListener не отвечает?

Ответ 2

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

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

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

Ответ 3

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

android:descendantFocusability="blocksDescendants"

На верхний уровень LinearLayout списка.

Ответ 4

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

CheckBox check;
check=new CheckBox(this);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO Auto-generated method stub
    }
});

Ответ 5

Вы можете добавить этот код в свой метод 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);
}