簡體   English   中英

無法保存 sharedPreference 狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM