[英]unable to save sharedPreference state
我在 RecyclerView Adapter 中最喜歡使用切換按鈕
編輯:下面的解決方案有效,但現在當我喜歡一個並重新啟動應用程序時,所有按鈕都會被收藏,對於不喜歡的情況也是如此,請提供解決方案
這是代碼:
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
MyModel myModel = myModelList.get(position);
holder.imageView.setImageResource(myModel.getImage());
holder.textView.setText(myModel.getText());
holder.toggle_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean isFavourite = readStae();
if (isFavourite) {
holder.toggle_btn.setBackgroundResource(R.drawable.fav);
isFavourite = false;
saveStae(isFavourite);
} else {
holder.toggle_btn.setBackgroundResource(R.drawable.unfav);
isFavourite = true;
saveStae(isFavourite);
}
}
});
}
@Override
public int getItemCount() {
return myModelList.size();
}
private void saveStae(boolean isFavourite) {
SharedPreferences aSharedPreferenes = context.getSharedPreferences(
"Favourite", Context.MODE_PRIVATE);
SharedPreferences.Editor aSharedPreferenesEdit = aSharedPreferenes
.edit();
aSharedPreferenesEdit.putBoolean("State", isFavourite);
aSharedPreferenesEdit.commit();
}
private boolean readStae() {
SharedPreferences aSharedPreferenes = context.getSharedPreferences(
"Favourite", Context.MODE_PRIVATE);
return aSharedPreferenes.getBoolean("State", false);
}
}
當我重新啟動應用程序時,收藏夾按鈕不存在。
我做錯了什么,請解釋解決方案,謝謝
您在 Click Listener 中調用readState()
,因此在onBindViewHolder
上,它不會執行該方法。 您需要像這樣更改代碼。
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
MyModel myModel = myModelList.get(position);
holder.imageView.setImageResource(myModel.getImage());
holder.textView.setText(myModel.getText());
boolean isFavourite = readStae();
if (isFavourite) {
holder.toggle_btn.setBackgroundResource(R.drawable.fav);
} else {
holder.toggle_btn.setBackgroundResource(R.drawable.unfav);
} }
然后在 ViewHolder 類中應用點擊監聽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.