我有这样的项目布局,并使用项目选择器
设置背景<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一样的收件箱。每行都有一个复选框,用户可以点击项目,如果他们想看到消息
答案 0 :(得分:40)
执行此操作的最佳方法是为您的复选框设置以下属性:
android:focusable="false"
android:focusableInTouchMode="false"
我遇到了同样的问题并做了这件事。
答案 1 :(得分:16)
如果listView中有任何可点击的按钮,ImageButton,Checkbox等,则listView的onItemClickListener将不起作用。添加
mainListView.setItemsCanFocus(true);
答案 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);
}