gpt4 book ai didi

android - 在 RecyclerView 中保存 Checkbox 的状态

转载 作者:行者123 更新时间:2023-11-29 00:52:17 24 4
gpt4 key购买 nike

使用 RecyclerView,我想保存 Checkbox 状态。

在这种情况下,我尝试使用共享首选项,下面的代码是我所拥有的,但它不起作用。

如何在 RecyclerView 中使用 SharedPreferences?下面是我的适配器类。

数据适配器

private Context mCtx;
private boolean isMyValueChecked;

private List<Final> resultList;

//getting the context and product list with constructor
public FavoriteAdapter(Context mCtx, List<Final> resultList) {
this.mCtx = mCtx;
this.resultList = resultList;
}

@Override
public FavoriteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflating and returning our view holder
LayoutInflater inflater = LayoutInflater.from(mCtx);
View view = inflater.inflate(R.layout.details_items, null);
SharedPreferences sharedPreferences= view.getContext().getSharedPreferences("My preference",Context.MODE_PRIVATE);
isMyValueChecked= sharedPreferences.getBoolean("checkbox",false);

return new FavoriteViewHolder(view);
}

@Override
public void onBindViewHolder(final FavoriteViewHolder holder, int position) {
//getting the product of the specified position
Final result = resultList.get(position);

holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences= v.getContext().getSharedPreferences("My preference",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("checkbox",holder.checkBox.isChecked());
editor.apply();
}
});
holder.checkBox.setChecked(isMyValueChecked);
}

@Override
public int getItemCount() {
return resultList.size();
}


class FavoriteViewHolder extends RecyclerView.ViewHolder {

CheckBox checkBox;

public FavoriteViewHolder(View itemView) {
super(itemView);


checkBox=itemView.findViewById(R.id.checkBox);
}
}

最佳答案

onBindViewHolder 而不是 onCreateViewHolder 中获取值 isMyValueChecked

并使用唯一 ID 将值存储在共享首选项中,因为如果您对每个项目使用相同的键,您的值将被覆盖。

@Override
public void onBindViewHolder(final FavoriteViewHolder holder, int position) {
//getting the product of the specified position
Final result = resultList.get(position);

holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences= v.getContext().getSharedPreferences("My preference",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(result.id,holder.checkBox.isChecked()); //use id instead of hard code checkbox
editor.apply();
}
});
isMyValueChecked= sharedPreferences.getBoolean(result.id,false); //fetch checked value
holder.checkBox.setChecked(isMyValueChecked);
}

关于android - 在 RecyclerView 中保存 Checkbox 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com