Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从Recyclerview保存复选框状态_Android_Android Recyclerview_Android Checkbox - Fatal编程技术网

Android 从Recyclerview保存复选框状态

Android 从Recyclerview保存复选框状态,android,android-recyclerview,android-checkbox,Android,Android Recyclerview,Android Checkbox,我的回收视图中有一个复选框,现在我可以单击它并显示一个snackbar。但是有人能帮我从recyclerview保存复选框的状态吗 我在recyclerview适配器的onBindViewHolder中创建了一个onclicklistener private SparseBooleanArray mCheckedItems = new SparseBooleanArray(); @Override public void onBindViewHolder(fin

我的
回收视图中有一个复选框,现在我可以单击它并显示一个snackbar。但是有人能帮我从recyclerview保存复选框的状态吗

我在recyclerview适配器的
onBindViewHolder
中创建了一个onclicklistener

 private SparseBooleanArray mCheckedItems = new SparseBooleanArray();
        @Override
        public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {
            // get the single element from the main array
            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.mirlogo)
                    .showImageForEmptyUri(R.drawable.gallery_no_image)
                    .showImageOnFail(R.drawable.gallery_image_fail)
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .considerExifParams(true)
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    .build();

            final String images = HomeDataImages.IMAGES[i];
            // Set the values

            ImageLoader.getInstance()
                    .displayImage(images, viewHolder.mImage, options);

             viewHolder.mCheck.setChecked(mCheckedItems.get(i));
        Log.d("Position=", String.valueOf((mCheckedItems.get(i))));

        viewHolder.mCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                int position = viewHolder.getAdapterPosition();
                mCheckedItems.put(position, isChecked);
                Log.d("Checked Array = ", String.valueOf(mCheckedItems));
//                viewHolder.mCheck.setChecked(mCheckedItems);
//error comes here setChecked(boolean) cannot be applied to SparseBooleanArray
               if (isChecked){
                Snackbar snackbar = Snackbar.make(viewHolder.itemView, "Item Favorited", Snackbar.LENGTH_SHORT);
                snackbar.show();}
                else{
                   Snackbar snackbar = Snackbar.make(viewHolder.itemView, "Item Unfavorited", Snackbar.LENGTH_SHORT);
                   snackbar.show();}
               }
            });

    }

提前感谢。

假设
viewHolder.mCheck
是一个
CheckedTextView
我会使用这样一些:

private SparseBooleanArray mCheckedItems = new SparseBooleanArray();

@Override
public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {
    // get the single element from the main array
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.mirlogo)
            .showImageForEmptyUri(R.drawable.gallery_no_image)
            .showImageOnFail(R.drawable.gallery_image_fail)
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .considerExifParams(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();

    final String images = HomeDataImages.IMAGES[i];
    // Set the values

    ImageLoader.getInstance()
            .displayImage(images, viewHolder.mImage, options);

    viewHolder.mCheck.setChecked(mCheckedItems.get(i));

    viewHolder.mCheck.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = viewHolder.getAdapterPosition();
            final boolean newValue = !mCheck.isChecked();

            mCheckedItems.put(position, newValue);
            checkedTextView.setChecked(newValue);

            //display the text accordingly with the newValue value
            Snackbar snackbar = Snackbar.make(v, "Item Favorited", Snackbar.LENGTH_SHORT);
            snackbar.show();
        }
    });

    public List<Integer> getSelectedItemPositions() {
        List<Integer> selected = new ArrayList<>();
        for (int i = 0; i < mCheckedItems.size(); i++) {
            final boolean checked = mCheckedItems.valueAt(i);
            if (checked) {
                selected.add(mCheckedItems.keyAt(i));
            }
        }
        return selected;
    }

    public void restoreSelectedItems(List<Integer> positions){
        for (Integer position : positions) {
            mCheckedItems.put(position, true);
        }
    }
}
private SparseBooleanArray mCheckedItems=new SparseBooleanArray();
@凌驾
BindViewHolder上的公共void(最终回收器Wiholder viewHolder,int i){
//从主数组中获取单个元素
DisplayImageOptions=new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.mirlogo)
.showImageForEmptyUri(R.可绘制.图库编号\u图像)
.showImageOnFail(R.drawable.gallery\u image\u失败)
.cacheInMemory(真)
.cacheOnDisk(真)
.considerExifParams(真)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
最终字符串images=HomeDataImages.images[i];
//设置值
ImageLoader.getInstance()
.displayImage(图像、viewHolder.mImage、选项);
viewHolder.mCheck.setChecked(mCheckedItems.get(i));
viewHolder.mCheck.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=viewHolder.getAdapterPosition();
最终布尔值newValue=!mCheck.isChecked();
mCheckedItems.put(位置,新值);
checkedTextView.setChecked(newValue);
//使用newValue相应地显示文本
Snackbar Snackbar=Snackbar.make(v,“项目偏好”,Snackbar.LENGTH\u SHORT);
snackbar.show();
}
});
公共列表getSelectedItemPositions(){
所选列表=新建ArrayList();
对于(int i=0;i

基本上,我使用的是
SparseBooleanArray
来存储检查的元素。

现在我可以记录所有检查和未检查的值。但当应用程序重新打开时,我如何保存该数组并恢复选中的项目呢。。??我添加了两种方法:一种用于获取选定项,另一种用于初始化选定项数组。一旦您有了所选项目数组,您就可以将其保存在共享首选项中,并在活动启动时读取它。