Reputation: 185
I have an item layout like this, and set the background by using item selector
<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>
I have a ListView which will content some items. Then I used setOnItemClickListener() but it doesn't work. I found that the if I remove the checkbox in the item, everything will be okey.
What was the problem between the checkbox and the listener here? Can you give me some solution?
Update : This is the code of listener
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: I want to make the inbox like gmail on android. Each row has a checkbox and user can click on item if they want to see the message
Upvotes: 16
Views: 17329
Reputation: 1735
Just add
android:descendantFocusability="blocksDescendants"
To your top level LinearLayout of the listitem.
Upvotes: 9
Reputation: 1061
Best way to do this is set these following properties for your checkbox:
android:focusable="false"
android:focusableInTouchMode="false"
I had a same issue and did this.
Upvotes: 46
Reputation: 2145
Use setOnCheckedChangeListener
instead of onItemClickListne
r for checkbox
CheckBox check;
check=new CheckBox(this);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
}
});
Upvotes: 1
Reputation: 2145
You could add this code within your OnItemClickListener
method:
public void onItemClick(AdapterView parent, View view, int position, long id){
CheckBox box = (CheckBox)view.findViewById(R.id.course_search_checkbox);
box.setChecked(true);
}
Upvotes: 1
Reputation: 7634
The onItemClickListener for the listView will not work if you have any clickables like buttons, ImageButton, Checkbox, etc in the listView. Add
mainListView.setItemsCanFocus(true);
Refer ListView OnItemClickListener Not Responding?
Upvotes: 18