这将是一个微不足道的问题,但我在世界上相当新的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();
答案 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
来初始化视图。
您应该只使用它来提取您在onSavedInstanceState的Bundle
内保存的数据