【问题标题】:How do I make a Multiple checkbox stay in the same state every time I open my app?每次打开我的应用程序时,如何使多个复选框保持相同的状态?
【发布时间】:2015-12-29 07:10:04
【问题描述】:

这是我的适配器类 再次打开应用程序时,我必须再次选中复选框单击,我的数据已正确保存在首选项中,并且也进行了很好的比较,但问题是它没有显示在 for 循环内的复选框上选中,任何帮助都会得到帮助

    @Override
public View getView(final int position, View convertView, ViewGroup parent) {

    //getting sharedpreference DATa here
    animals = PoJo.readList(context, "savingkeyforcheckbox");
    final RecordHolder holder;
    view = convertView;
    mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (view == null) {
        view = mInflater.inflate(R.layout.items, parent, false);
        holder = new RecordHolder();
        holder.icon = (ImageView) view.findViewById(R.id.icon);
        holder.packagename = (TextView) view.findViewById(R.id.packagename);
        holder.clickpackage_checkbox = (CheckBox) view
                .findViewById(R.id.clickpackage_checkbox);
        view.setTag(holder);
    } else {
        holder = (RecordHolder) view.getTag();
    }
    holder.clickpackage_checkbox.setId(position);
    holder.packagename.setId(position);
    item = getItem(position);
    if (animals.size() > 0) {
        for (int i = 0; i < animals.size(); i++) {
            if (animals.get(i).equalsIgnoreCase(item.getLabel())) {
                Log.e("do check here", "CHECK");
                holder.clickpackage_checkbox.setChecked(true);
            } else {
                holder.clickpackage_checkbox.setChecked(false);

            }
        }
    } else {
        holder.clickpackage_checkbox.setChecked(false);
    }
    if (booleanArray.get(position)) {
        holder.clickpackage_checkbox.setChecked(true);
        item.setChecked(true);
    } else {
        holder.clickpackage_checkbox.setChecked(false);
        item.setChecked(false);
    }

    holder.packagename.setText(item.getLabel());
    Drawable icons = Utilities.createIconThumbnail(item.getIcon(), context);
    holder.icon.setImageDrawable(icons);
    holder.clickpackage_checkbox.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (holder.clickpackage_checkbox.isChecked()) {
                booleanArray.put(position, true);
            selecteditems.add(listofitems.get(position).getLabel());
            } else {
                booleanArray.put(position, false);
                selecteditems.remove(listofitems.get(position).getLabel());
            }
        }
    });
    //POJO IS MODEL CLASS AND SAVING PREFERENCES OF ITEMS IN WRITELIST
    PoJo.writeList(context, selecteditems, "savingkeyforcheckbox");
    SelectedAdapter.this.notifyDataSetChanged();
    return view;
}

【问题讨论】:

  • 您可以使用共享偏好来保存状态,并在打开应用时检索状态并将它们设置为您的复选框。
  • 是否进入if条件?我的意思是它会打印出“在这里检查:检查”吗?
  • 在那之后您是否尝试过将Log.e("do check here", "UNCHECK") 置于else 条件下? else { Log.e("do check here", "UNCHECK"); holder.clickpackage_checkbox.setChecked(false); }
  • @denis_lor ya denis 我做了但是在添加这个时它取消了我所有的复选框
  • 我知道错误是因为使用下面的代码重新创建视图,但我不知道如何解决这个问题请帮助 booleanarray is SparseBooleanArray if (booleanArray.get(position)) { holder.clickpackage_checkbox.setChecked (真的); } else { holder.clickpackage_checkbox.setChecked(false); }

标签: android


【解决方案1】:

您可以使用 Getter 和 Setter 从首选项中保存和检索复选框值 并将其设置为复选框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多