RecycleView中的SharedPrefs

问题描述 投票:0回答:1

我创建了2个活动。一个实现RecyclerView.Adapter并接收数据,另一个实现发送那些数据。这些数据的目的是在活动中的recyclerview内更改textView的文本。所以我使用了SharedPrefences,但是不知何故它不显示保存的值。 (甚至不是defValue)为什么不起作用?谢谢你的帮助。

RecyclerView代码:

public class MultiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private SharedPreferences mSharedPreferences;
    private SharedPreferences.Editor mEditor;
    private Context context;

    public MultiAdapter(List<myObject> Parts, Context 
    context) {
        this.items = Parts;
        this.context = context;}

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView segment;

        private ViewHolder( View itemView, int position) {
            super(itemView);
            segment = itemView.findViewById(R.id.segment_field);
            mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
            mEditor = mSharedPreferences.edit();

            String DAY1 = mSharedPreferences.getString("DayD1", "incomplete");
            segment.setText("Day "+ DAY1);
        }
    }

发送数据活动代码:

public class Day1_Program extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    ... }

(on click from button)
public void Done(View view){

        SharedPreferences mPreferences = 
        PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor mEditor = mPreferences.edit();

        mEditor.putString("DayD1", "complete");

        mEditor.apply();

在Activity中没有调用SharedPrefs来接收数据,因为所有数据都应该在适配器本身中更改。但是输出是“ Day”,为什么?我不明白问题出在哪里。我想知道问题是否出在getDefaultSharedPreferences()中,因为在recyclerView中我使用了私有内容,而在活动中我使用了它。但是,如果我也想在recyclerView中使用它,那就是类型错误。

android android-studio android-recyclerview sharedpreferences recycler-adapter
1个回答
0
投票

您在按钮上单击RecyclerView之前先填充click的数据,这就是为什么对SharedPreference所做的更改不会反映在视图上的原因。尝试如下的刷新视图:

public void Done(View view){

    SharedPreferences mPreferences = 
    PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor mEditor = mPreferences.edit();

    mEditor.putString("DayD1", "complete");

    mEditor.apply();

    //Refresh your view by notifying adapter
    multiAdapter.notifyDataSetChanged();

}
© www.soinside.com 2019 - 2024. All rights reserved.