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