将复选框的选中状态保存在多选列表视图中 [英] save checked state of checkbox in multi select listview

查看:54
本文介绍了将复选框的选中状态保存在多选列表视图中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是这个多重选择列表视图的新手.我想将复选框的选中状态保存在列表视图中,以便如果用户关闭应用程序然后再次打开,则选中的复选框仍保持选中状态.有没有办法做到这一点.我搜索了它,发现可以使用SharedPreference完成它,但是我没有获得有关如何使用它的更多信息.谢谢

I'm new to this multi-select listview. I want to save the checked state of the checkbox in the listview so that if user closes the app and then opens again, the selected checkbox still remain selected. Is there any way to do this. I searched for it and found that it can be done using SharedPreference but I didn't get more information on how to use it. Thanks

public class MainActivity extends AppCompatActivity {

    ListView myList;
    Button getChoice;

    String[] listContent = {

            "January",
            "February",
            "March",
            "April",
            "May",
            "June",
            "July",
            "August",
            "September",
            "October",
            "November",
            "December"

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myList = (ListView)findViewById(R.id.list);
        getChoice = (Button)findViewById(R.id.getchoice);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, listContent);
        myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

        myList.setAdapter(adapter);

        getChoice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String selected = "";
                int cntChoice = myList.getCount();

                SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions();
                for(int i = 0; i < cntChoice; i++){
                    if(sparseBooleanArray.get(i)) {
                        selected += myList.getItemAtPosition(i).toString() + "\n";

                    }

                }

                Toast.makeText(MainActivity.this, selected, Toast.LENGTH_LONG).show();

            }
        });



    }
}

推荐答案

例如,您可以将状态保存在SharedPreferences中.

You can save state, for example, in SharedPreferences.

因此,您的 onCreate onDestroy 方法将类似于:

So your onCreate and onDestroy methods will be look like:

SharedPreferences sharedPreferences = getSharedPreferences("MySharedPrefs", MODE_PRIVATE);

@Override
protected void onCreate(final Bundle savedInstanceState) {
    ...
    Set<String> checkedItemsSource = sharedPreferences.getStringSet("checked_items", new HashSet<String>());
    SparseBooleanArray checkedItems = convertToCheckedItems(checkedItemsSource);
    for (int i = 0; i < checkedItems.size(); i++) {
        int checkedPosition = checkedItems.keyAt(i);
        listView.setItemChecked(checkedPosition, true);
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
    Set<String> stringSet = convertToStringSet(checkedItems);
    sharedPreferences.edit()
            .putStringSet("checked_items", stringSet)
            .apply();
}

private SparseBooleanArray convertToCheckedItems(Set<String> checkedItems) {
    SparseBooleanArray array = new SparseBooleanArray();
    for(String itemPositionStr : checkedItems) {
        int position = Integer.parseInt(itemPositionStr);
        array.put(position, true);
    }

    return array;
}

private Set<String> convertToStringSet(SparseBooleanArray checkedItems) {
    Set<String> result = new HashSet<>();
    for (int i = 0; i < checkedItems.size(); i++) {
        result.add(String.valueOf(checkedItems.keyAt(i)));
    }

    return result;
}

这篇关于将复选框的选中状态保存在多选列表视图中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆