OnItemClickListener was not work with the checkbox?
-
27-05-2021 - |
Domanda
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
Soluzione
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);
Altri suggerimenti
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.
Just add
android:descendantFocusability="blocksDescendants"
To your top level LinearLayout of the listitem.
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);
}
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
}
});