android - 如何在两个不同的RecyclerViewAdapters

时间:2017-09-06 05:27:09

标签: java android android-recyclerview recycler-adapter

我有两个RecyclerView适配器。而且,我在这两个适配器中使用SharedPreferences。

在第一个适配器中,我保存araayList大小的String值,如String.valueOf(dataList.size())。第一个适用于共享偏好的适配器中的代码如下:

public class ItemRowHolder extends RecyclerView.ViewHolder {

    protected TextView itemTitle;
    protected RecyclerView recycler_view_list;
    protected TextView lblnoOfItems;

    public ItemRowHolder(View view) {
        super(view);

        this.itemTitle = (TextView) view.findViewById(R.id.itemTitle);
        this.recycler_view_list = (RecyclerView) view.findViewById(R.id.recycler_view_list);
        this.lblnoOfItems = (TextView) view.findViewById(R.id.lblnoOfItems);

        sharedPreferences = mContext.getSharedPreferences("DataList", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putString("MyDataList", String.valueOf(dataList.size()));
        editor.apply();
    }
}

并且,我在onCreateViewHolder()内的另一个适配器中获取共享的Preference值。这是代码:

@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(viewGroup.getContext());
    String value = pref.getString("MyDataList", null);

    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, null);
    SingleItemRowHolder mh = new SingleItemRowHolder(v);
    return mh;
}

我调试了几次,发现当我在第二个适配器String value = pref.getString("MyDataList", null)接收时,我变为空。

我在这里做错了吗?此外,有人可以告诉您这是否是在RecyclerView适配器中接收共享首选项值的正确方法。

1 个答案:

答案 0 :(得分:1)

在onCreateViewHolder()的第二个适配器中,您的共享pref错误, 替换

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(viewGroup.getContext());

SharedPreferences pref = viewGroup.getContext().getSharedPreferences("DataList", Context.MODE_PRIVATE);

通过阅读以下android文档,您可以了解更多相关信息: https://developer.android.com/training/basics/data-storage/shared-preferences.html#GetSharedPreferences