0

チェックボックスのチェックリストをRecyclerViewアダプターに保存するための SharedPreferenceを実装しようとしていました。チェックリスト配列を正しくログに記録できます。しかし、共有設定に保存して、毎回アプリを再度開くときに復元することはできません。

これが私のRecyclerViewアダプターコードです。

public class HomeManager extends RecyclerView.Adapter<HomeManager.RecyclerViewHolder> {
    private static DisplayImageOptions displayOptions;
    static View v1;
    private SparseBooleanArray mCheckedItems = new SparseBooleanArray();

    static {
        displayOptions = DisplayImageOptions.createSimple();
    }

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder {

        CheckBox mCheck;

        RecyclerViewHolder(final View itemView) {
            super(itemView);

            mCheck = (CheckBox) itemView.findViewById(R.id.PROJECT_fav);
            SharedPreferences update = v1.getContext().getSharedPreferences("my_prefs", 0);
            String Check = update.getString("Check", "");
            Log.e("Checked Array = ", Check);

        }
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        v1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false);

        return new RecyclerViewHolder(v1);

    }

    @Override
    public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {

//      viewHolder.mCheck.setChecked(mCheckedItems);


        viewHolder.mCheck.setChecked(mCheckedItems.get(i));
        viewHolder.mCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                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();
                }
                int position = viewHolder.getAdapterPosition();
                mCheckedItems.put(position, isChecked);
                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));
                    }
                }
                Log.e("Checked Array = ", String.valueOf(selected));
                SharedPreferences prefs = v1.getContext().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
                SharedPreferences.Editor edit = prefs.edit();
                edit.putString("Checkbox", String.valueOf(selected));
                edit.commit();
                Log.e("Shared Preference = ", String.valueOf(edit));
            }
        });

}
4

2 に答える 2

1

問題は単純です。同じキーで保存してアクセスする必要があります。

現在、「チェック」キーを使用して保存されたデータにアクセスしようとしています:

SharedPreferences update = v1.getContext().getSharedPreferences("my_prefs", 0);
String Check = update.getString("Check", "");

ただし、キー「チェックボックス」を使用して保存しています。

SharedPreferences prefs = v1.getContext().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putString("Checkbox", String.valueOf(selected));
edit.commit();

両方に「チェック」または「チェックボックス」を使用してください。混ぜ合わせることはできません。

于 2015-12-16T06:10:55.747 に答える