我正在使用ListView
CheckBox
。我只选择了一个CheckBox
,但它会使用ScrollView
自动选为多行。
示例代码(此代码完美运行)
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]);
但是当我使用setOnItemClickListener
时,它无效。
示例代码(此代码对我不起作用)
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]);
我可以弄错的地方。如何避免这个CheckBox
选择。
你能帮帮我吗?
答案 0 :(得分:3)
您可以使用onItemClick()
和setTag()
在getTag()
内获取CheckBox的实例。您可以在getView()
方法中将CheckBox实例设置为
convertView.setTag(R.id.check, viewHolder.checkbox);
使用
获取onItemClick()
内的实例
CheckBox checkbox = (CheckBox) v.getTag(R.id.check);
如果您有任何进一步的查询,可以查看my blog post
。
答案 1 :(得分:3)
要使列表视图具有焦点,请从项目本身中移除焦点。 在实例化listview之后添加以下内容:
listview.setItemsCanFocus(false);
然后将以下内容添加到list_item.xml
<CheckBox
android:id="@+id/lock_File_CheckBox"
android:focusable="false"
android:focusableInTouchMode="false"/>
这样,您的setOnItemClickListener()
将被调用
答案 2 :(得分:0)
不要使用onClick。使用OnCheckedChange
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
doSomethingWithCheckedState(compoundButton);
} else {
doSomethingWithUnCheckedState(compoundButton);
}
}
});
请记住,CheckBox继承自CompoundButton,以实现ICS的交换机兼容性。
答案 3 :(得分:0)
列表项中的可聚焦视图可防止在单击列表项时在onListItemClick()
中触发ListActivity
。但onListItemClick()
可以实现OnClickListener
的效果。阅读here有关此内容的更多信息