Android ListView多个复选框

时间:2011-07-22 00:26:37

标签: android

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

我可以使用checkbox.setOnCheckedChangeListener(this)

收听点击次数

如何确定点击了哪个复选框?我没有得到任何索引。

ps OnListItemClicked超出了范围,因为我没有使用ListActivity

4 个答案:

答案 0 :(得分:1)

您可以实现onListItemClickListener()。迭代所有listview项并检查每个项目(每个项目子视图)。

for(int i = 0; i  <= listView.getLastVisiblePosition(); i++)
    {
        if(listView.getChildAt(i)!= null)
        { 
            if(((CheckBox)listView.getChildAt(i).findViewById(R.id.checkbox)).isChecked())
            {  
          //do something
             }else { //do something else}

        }
    }

或者,如果选中了项目复选框,则可以签入getView()方法。

答案 1 :(得分:1)

做这样的事情

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);
        }
    }
};

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

答案 2 :(得分:0)

ListView仍然有一个setOnListItemClickedListener()方法,您可以将侦听器创建为对象并将其传入,而不是在您的“活动”上下文中实现它。

编辑:是的,它从AdapterView继承。

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

答案 3 :(得分:0)

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

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;
        }
    }
});