我的ListView
包含十行。每行包含CheckBox
。如何使用CheckBox
setOnItemClickListener
示例代码:(这对我不起作用)
listview.setOnItemClickListener( new OnItemClickListener()
{
public void onItemClick( AdapterView<?> parent, final View v, final int position, long id )
{
Toast.makeText( this, " Position is " + position, Toast.LENGTH_SHORT ) .show();
holder.checkbox = ( CheckBox ) v.findViewById( R.id.lock_File_CheckBox );
holder.checkbox.toggle();
}
});
我们如何确定是否选中CheckBox
?
答案 0 :(得分:1)
尝试将OnCheckedChangeListener用于CheckBox
CheckBox repeatChkBx = ( CheckBox ) findViewById( R.id.repeat_checkbox );
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
// perform logic
}else
{
// perform logic
}
}
});
答案 1 :(得分:1)
要在onItemClick()
中获取Checkbox的实例,您需要使用setTag()
和getTag()
作为复选框实例。您可以查看my example on my blog
,了解我们如何在onItemClick()
内获取CheckBox实例。
在onItemClick()
内获取CheckBox实例后,更新您的列表内容并通知onItemClick()
内的适配器,
if(checkbox.isChecked())
list.get(position).setSelected(false);
else
list.get(position).setSelected(true);
adapter.notifyDataSetChanged();
答案 2 :(得分:0)
Checkbox有oncheckedChangeListener 在ListView的getView函数中编写此代码
Toast.makeText( this, " Position is " + position, Toast.LENGTH_SHORT ) .show();
holder.checkbox = ( CheckBox ) v.findViewById( R.id.lock_File_CheckBox );
holder.checkbox.toggle();
holder.checkbox .setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
// perform logic
}else
{
// perform logic
}
}
});
答案 3 :(得分:0)
问题是您没有position
- 参数来确定您点击了哪个视图。 OnItemClickListener确实为您提供了此参数,以便知道列表中的哪个项目已被单击。在位置X处理此项目的逻辑,您将必须实现。
您的解决方案将如下所示:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) {
// mData is the Array (or some other Collection) of Checkboxes which I gave to my ListAdapter
((CheckBox)mData.get(position)).toggle();
}
});