【问题标题】:How to save checkbox state in listview using sharedpreference如何使用 sharedpreference 在列表视图中保存复选框状态
【发布时间】:2016-05-30 06:21:05
【问题描述】:

我在列表视图中有复选框,我希望在单击它时保存复选框状态,现在当我恢复我的应用程序时,所有复选框都将被取消选中。我正在尝试开发列表行文本视图的 TODO 列表应用程序罢工和复选框将被选中,我如何将复选框状态和罢工文本视图保存到共享首选项和加载中。

 protected void onCreate(Bundle saved) {
        super.onCreate(saved);
        setContentView(R.layout.cbox_list);
        Listvw = (ListView) findViewById(R.id.clistvw);
        Listvw.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                cText = (TextView) view.findViewById(R.id.ctext);
                cBox = (CheckBox) view.findViewById(R.id.cbox);
                cBox.setChecked(true);
                //Toast.makeText(getActivity(),"Clicked",Toast.LENGTH_LONG).show();
                cText.setPaintFlags(cText.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                //boolean value=cBox.isChecked();
                int b = Listvw.getAdapter().getCount();
                for (int i1 = 0; i1 < b; i1++) {
                    if (cBox.isChecked()) {
                        SharedPreferences spf = PreferenceManager.getDefaultSharedPreferences(CBox_InListView.this);
                        SharedPreferences.Editor edit = spf.edit();
                        edit.putBoolean("name"+i1, cBox.isChecked());
                        edit.commit();
                    }
                }
            }
        });

        model = new CheckModel[12];
        model[0] = new CheckModel("Item1", 0);
        model[1] = new CheckModel("Item", 0);
        model[2] = new CheckModel("Item", 0);
        model[3] = new CheckModel("Item", 0);
        model[4] = new CheckModel("Item", 0);
        model[5] = new CheckModel("Item", 0);
        model[6] = new CheckModel("Item", 0);
        model[7] = new CheckModel("Home Head", 0);
        model[8] = new CheckModel("Item", 0);
        model[9] = new CheckModel("Item", 0);
        model[10] = new CheckModel("Item", 0);
        model[11] = new CheckModel("Item", 0);
        CustomAdapter adpter = new CustomAdapter(this, model);
       int c=Listvw.getAdapter().getCount();
        for(int i=0;i<c;i++)
        {
            SharedPreferences pf=PreferenceManager.getDefaultSharedPreferences(CBox_InListView.this);
            boolean chkbx=pf.getBoolean("name"+i,false);
            if(chkbx){
                cBox.setChecked(true);
            }else{
                cBox.setChecked(false);
            }
        }
        Listvw.setAdapter(adpter);

【问题讨论】:

  • 在模型类中为复选框保留一个布尔变量,并将模型保存在共享首选项中
  • 要在 sharedPreference 中保存数组类型的值,您必须使用 editor.putStringSet("pref_key");

标签: android listview checkbox


【解决方案1】:

对大数据使用 SharedPreferences 并不是一个好方法。您应该使用 SQLlite 数据库来维护您的 TODO 列表的当前状态。将待办事项的标题设置为主键,您的 CheckModel 类中应该有一个布尔变量,用于定义复选框是否被选中。

然后您必须在适配器的 getView 方法中实现逻辑,以将复选框设置为选中或未选中状态,而不是您现在的方式。

【讨论】:

  • 谢谢,我用的是SQLIte数据库。
  • 太好了,如果您需要进一步的帮助,您可以随时通过 atif.rehman@orangebuddies.pk 与我联系
【解决方案2】:

->创建 Sqlite 数据库并为您的应用创建一个包含所有必需字段的表,并为复选框状态创建一个字段

->现在在您的复选框活动加载时加载数据库,并在您的列表视图从数据库中填充数据时填充复选框状态。

->当用户选择或取消选择复选框时,监听复选框状态并更新数据库

对每个列表项使用共享偏好并不好,数据库是不错的选择。

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多