如何恢复RecyclerView的LayoutManager?

时间:2015-04-19 15:13:33

标签: android android-linearlayout android-recyclerview

这将是一个微不足道的问题,但我在世界上相当新的Android。 场景是这样的:我有多个选项来显示一些元素, GridLayoutManager LinearLayoutManager ,不知道该怎么做,现在我有一个像这样的脏代码:

onOptionItemSelected中的代码片段; 下面,我必须创建一个对象的LinearLayoutManager和GridLayoutManager,然后设置RecyclerView的布局

case R.id.visualizza:{
            // isList() return true only if getLayoutManager() == LinearLayoutManager
            if(isList()){
                // setta il titolo del menu item con la stringa txtList
                item.setTitle(getString(R.string.txtList));
                mGridLayoutManager = new GridLayoutManager(this, 2);
                mRecyclerView.setLayoutManager(mGridLayoutManager);
            }else{
                item.setTitle(getString(R.string.txtGrid));
                mLinearLayoutManager = new LinearLayoutManager(this);
                mRecyclerView.setLayoutManager(mLinearLayoutManager);
            }
            break;
}

此处在onRestoreInstanceState();在这里,我不得不为Linear和Grid创建一个对象......我认为不是一个好习惯! 但我不知道如何解决。

@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    if (savedInstanceState.getBoolean("seiList")){
        mLinearLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLinearLayoutManager);
    }else{
        mGridLayoutManager = new GridLayoutManager(this, 2);
        mRecyclerView.setLayoutManager(mGridLayoutManager);
    }
}

我想要的是,如果第一次使用该应用程序,则提供LinearLayout的设置,而对于其余部分,只需保留用户的选择。

我希望我能顺利通过我的问题而且有人乐意帮忙!

更新
我通过SharedPreferences解决了 onStop()

if (isList()){
        preferences.edit().putBoolean("linear", true).commit();

1 个答案:

答案 0 :(得分:0)

使用SharedPreferences以保存偏好设置数据。

所以我们假设这是用户第一次使用您的应用:

public void onCreate(...){
    ....
    final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
    boolean isFirstUse = sp.getBoolean(PREF_IS_FIRST_TIME, true);

    if(isFirstUse){
        final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
        sp.edit().putBoolean(PREF_IS_FIRST_TIME, false).apply();
    }

然后您可以轻松决定使用哪个LayoutManager。当然是你 也可以使用SharedPreferences来保存用户选择。这就是SharedPreferences的全部内容。

您也不应该使用onRestoreInstanceState来初始化视图。 您应该只使用它来提取您在onSavedInstanceStateBundle内保存的数据