Android:CursorAdapter、ListView 和 CheckBox

新手上路,请多包涵

我有自己的布局和 CustomCursorAdapter 的 ListView。每行都有自己的复选框。所以……很明显,在滚动过程中,复选框会失去它们的状态。我发现的唯一东西是 Android save Checkbox State in ListView with Cursor Adapter 但那里没有答案。还有一个问题。我的 CustorArrayAdapter 也有同样的问题。我使用 SparseBooleanArray 来保持复选框状态解决了这个问题。它工作正常,但每次滚动都会调用 onCheckedChanged。这正常吗?交易是我的列表视图描述警报元素和定期调用(onCheckedChanged)启动/停止警报。很多不必要的动作。

原文由 Nick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 367
2 个回答

我的 ListViewCheckBox 有类似的问题,我做了什么来解决这个问题:

  • 创建一个布尔对象的 ArrayList 来存储每个 CheckBox 的状态
  • 将 ArrayList 项目初始化为默认值 false ,意味着尚未选中 CheckBox。
  • 当您单击复选框时。设置检查已检查/未检查状态并将该值存储在 ArrayList 中。
  • 现在使用 setChecked() 方法将该位置设置为 CheckBox。

请参阅此代码段:

 public class DataAdapter extends SimpleCursorAdapter {
private Cursor c;
private Context context;
private ArrayList<String> list = new ArrayList<String>();
private ArrayList<Boolean> checkedItems = new ArrayList<Boolean>();

public DataAdapter(Context context, int layout, Cursor c, String[] from,
        int[] to) {
    super(context, layout, c, from, to);
    this.c = c;
    this.context = context;

    for (int i = 0; i < this.getCount(); i++) {
        checkedItems.add(i, false); // initializes all items value with false
    }
}

public View getView(final int pos, View inView, ViewGroup parent) {
    if (inView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inView = inflater.inflate(R.layout.list_item, null);
    }

    final CheckBox checkBox = (CheckBox) inView.findViewById(R.id.bcheck);
    checkBox.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            CheckBox cb = (CheckBox) v;
            if (cb.isChecked()) {
                checkedItems.set(pos, true);
            } else if (!cb.isChecked()) {
                checkedItems.set(pos, false);
            }
        }
    });
    checkBox.setChecked(checkedItems.get(pos));
    return inView;
}}

原文由 Vikas Patidar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题