繁体   English   中英

实现自定义可检查列表视图+动态适配器

[英]Implementing custom checkable list view + dynamic adapter

我实现了具有两行(名称和数字)的自定义列表视图,它是可检查的。 列表视图具有多个选择选项。

每当用户搜索名称时,光标都会返回新的项目列表。 一旦适配器被新的光标项目更改,我就无法跟踪先前选择的项目。

例如,用户搜索名称“ Jo”,它将返回10个项目,其中我选择了2行。 删除搜索后,游标和适配器就会更改。 我无法标记选中的项目。

我想基于位置覆盖默认的可检查项(必须编写自己的内容,必须根据_id(contact id)使项目可检查)(我尝试覆盖onFinishInflate方法。但这无济于事)。

任何帮助表示赞赏。 提前致谢。

您需要一个对象来让您的复选框数据保留在适配器和列表视图中。 布尔数组的哈希图应足够。

private HashMap<String, boolean[]> contactMap;

我想您可以将其加载到某种数据库方法或某些方法中,并且如果需要的话,可以使用该人的名字(例如“ Jo”)作为标识符。 数组索引将与每个列表视图行中显示的复选框相对应。 然后在我想象的是CursorAdapter适配器中,您可能具有以下内容:

private boolean[] contactObj;

public void setContactObj(boolean[] contactObj) {
    this.contactObj = contactObj;
    notifyDataSetChanged();
}

public boolean[] getContactObj() {
    return contactObj;
}

@Override
public void bindView(View view, Context context, Cursor c) {
    final int position = c.getPosition();
    final CheckBox cb = (CheckBox) view.findViewById(R.id.checkbox);

    cb.setChecked(contactObj[position]);
    cb.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (cb.isChecked()) {
                contactObj[position] = true;
            } else {
                contactObj[position] = false ;
            }
        }
    });
}

基本上,您有一个仅能容纳一个boolean[]的适配器,该适配器能够调整列表视图中的复选框,在单击复选框时将其修改为boolean [],然后在仍然需要时返回它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM