OnItemClickListener无法使用复选框?

时间:2012-03-28 03:54:57

标签: android checkbox 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:我想在android上制作像gmail一样的收件箱。每行都有一个复选框,用户可以点击项目,如果他们想看到消息

5 个答案:

答案 0 :(得分:40)

执行此操作的最佳方法是为您的复选框设置以下属性:

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

我遇到了同样的问题并做了这件事。

答案 1 :(得分:16)

如果listView中有任何可点击的按钮,ImageButton,Checkbox等,则listView的onItemClickListener将不起作用。添加

mainListView.setItemsCanFocus(true);

参考ListView OnItemClickListener Not Responding?

答案 2 :(得分:8)

添加

android:descendantFocusability="blocksDescendants"

到列表项目的顶级LinearLayout。

答案 3 :(得分:1)

使用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
    }
});

答案 4 :(得分:1)

您可以在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);
}