Android ListView多个复选框

Android ListView多个复选框,android,Android,我在FrameLayout活动(不是列表活动)中有一个listView 我可以使用checkbox.setOnCheckedChangeListener(this) 如何确定单击了哪个复选框?我没有任何索引 psOnListItemClicked超出范围,因为我没有使用ListActivity您可以实现onListItemClickListener()。迭代所有listview项并检查每个项(每个项子视图) for(int i=0;iListView仍然有一个setOnListItemClick

我在FrameLayout活动(不是列表活动)中有一个listView

我可以使用
checkbox.setOnCheckedChangeListener(this)

如何确定单击了哪个复选框?我没有任何索引


ps
OnListItemClicked
超出范围,因为我没有使用
ListActivity
您可以实现onListItemClickListener()。迭代所有listview项并检查每个项(每个项子视图)


for(int i=0;iListView仍然有一个setOnListItemClickedListener()方法,您只需将侦听器创建为一个对象并传入,而不是在活动上下文中实现它

编辑:是的,它从AdapterView继承


转到向下滚动到“继承的方法”部分,然后单击AdapterView左侧的箭头,您将找到setOnItemClickListener()。在确保它存在之前,我已经在代码中使用过它。

尝试使用
listView1.GetCheckEditePosition()
。您也可以尝试这样做:

private int checkedItemPosition;

listView1.setOnItemClickListener(new ListView.OnItemClickListener()
{
    public void onItemClick(AdapterView<?> listView, View selectedItem, int position, long itemId)
    {
        CheckBox checkbox = (CheckBox)selectedItem.findViewById(R.id.checkbox);
        if (checkbox.isChecked())
        {
            checkedItemPosition = position;
        }
    }
});
private int checkedItemPosition;
listView1.setOnItemClickListener(新的ListView.OnItemClickListener()
{
public void onItemClick(AdapterView列表视图、View selectedItem、int位置、长项目ID)
{
复选框=(复选框)选择editem.findviewbyd(R.id.CheckBox);
如果(checkbox.isChecked())
{
checkedItemPosition=位置;
}
}
});
像这样做

Vector vect = new Vector();
lv1.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, item));
    lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lv1.setClickable(true);
    lv1.setScrollingCacheEnabled(true); 
    lv1.setOnItemClickListener(deleteclicklistener);


private OnItemClickListener deleteclicklistener = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View v, int position,
            long id) {
        if(vect.contains(position))
        {
            vect.removeElement(position);
        }else
        {
            vect.addElement(position);
        }
    }
};
Vector vect=new Vector();
lv1.setAdapter(新阵列适配器),
android.R.layout.simple_list_item_多项选择,item));
lv1.setChoiceMode(ListView.CHOICE\u MODE\u MULTIPLE);
1级。可设置可点击(真);
lv1.SetScrolingCacheEnabled(真);
lv1.setOnItemClickListener(deleteclicklistener);
私有OnItemClickListener deleteclicklistener=新建OnItemClickListener(){
@凌驾
公共视图单击(AdapterView arg0,视图v,内部位置,
长id){
if(向量包含(位置))
{
向量移除(位置);
}否则
{
矢量加法(位置);
}
}
};

我认为这应该可以解决您的问题

if(((CheckBox)listView.getChildAt(I).findViewById(R.id.CheckBox)).isChecked())您可以简化为查看parentView=listView.getChildAt(I);CheckBox chkbox=(CheckBox)parentView.findViewById(R.id.CheckBox);if(chkbox.isChecked())我的意思是我不想循环所有的子项,应该有更好的方法。当然,在适配器中的
getView()
方法中,您可以进行检查。行项目应该可以单独单击。将clickable设置为True会使checkbox+行项目成为可单击的项目。
Vector vect = new Vector();
lv1.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, item));
    lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lv1.setClickable(true);
    lv1.setScrollingCacheEnabled(true); 
    lv1.setOnItemClickListener(deleteclicklistener);


private OnItemClickListener deleteclicklistener = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View v, int position,
            long id) {
        if(vect.contains(position))
        {
            vect.removeElement(position);
        }else
        {
            vect.addElement(position);
        }
    }
};