Reputation: 1071
I am using ListView
with CheckBox
. I have selected only one CheckBox
but it's automatically selected into Multiple Rows using ScrollView
.
Sample Code (This Code is working Perfectly)
holder.checkbox.setOnClickListener( new OnClickListener()
{
public void onClick( View v )
{
CheckBox cb = ( CheckBox ) v;
if ( cb.isChecked() )
{
test[position] = true;
holder.checkbox.setChecked(test[position]);
}
else
{
test[position] = false;
holder.checkbox.setChecked(test[position]);
}
}
});
holder.checkbox.setChecked(test[position]);
But When i uses setOnItemClickListener
it's not working.
Sample Code (This code is not working for me)
listview.setOnItemClickListener( new OnItemClickListener()
{
public void onItemClick( AdapterView<?> parent, final View v, final int position, long id )
{
holder.checkbox = ( CheckBox ) v.findViewById( R.id.lock_File_CheckBox );
if ( holder.checkbox.isChecked() )
{
test[position] = false;
holder.checkbox.setChecked(test[position]);
}
else
{
test[position] = true;
holder.checkbox.setChecked(test[position]);
}
}
});
holder.checkbox.setChecked(test[position]);
Where i can mistaken. How do avoid this CheckBox
Selection.
Can you please help me?
Upvotes: 0
Views: 5487
Reputation: 1088
To make your listview focusable, remove focus from the items themselves. Add the following after instantiating listview:
listview.setItemsCanFocus(false);
Then add the following to your list_item.xml
<CheckBox
android:id="@+id/lock_File_CheckBox"
android:focusable="false"
android:focusableInTouchMode="false"/>
With this, your setOnItemClickListener()
will get called
Upvotes: 4
Reputation: 5900
Focusable view in the list item prevents the firing of onListItemClick()
in the ListActivity
when the list item is clicked. But the effect of onListItemClick()
can be achieved with OnClickListener
. Read here more about this
Upvotes: 0
Reputation: 67286
You can get the instance of CheckBox inside onItemClick()
by using setTag()
and getTag()
. You can setTag the CheckBox instance inside your getView()
method as
convertView.setTag(R.id.check, viewHolder.checkbox);
And get the instance inside onItemClick()
using,
CheckBox checkbox = (CheckBox) v.getTag(R.id.check);
If you have any further query you can check my blog post
.
Upvotes: 3
Reputation: 231
Don't use onClick. Use OnCheckedChange
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
doSomethingWithCheckedState(compoundButton);
} else {
doSomethingWithUnCheckedState(compoundButton);
}
}
});
Keep in mind that CheckBox inherit from CompoundButton for ICS's switch compatibility.
Upvotes: 1