Android 旋转后将数据存储到自己的适配器中
我有一个带有listview的应用程序(一行包含textview、imageview、ratingbar)和我自己的适配器。当我在排序listview后旋转屏幕时(我在菜单中选择此选项),它会在排序前返回到窗体。 我尝试覆盖SaveInstanceState:Android 旋转后将数据存储到自己的适配器中,android,listview,rotation,Android,Listview,Rotation,我有一个带有listview的应用程序(一行包含textview、imageview、ratingbar)和我自己的适配器。当我在排序listview后旋转屏幕时(我在菜单中选择此选项),它会在排序前返回到窗体。 我尝试覆盖SaveInstanceState: @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putParcelable("listView", listView.onSaveInstanceState());
}
和片段onCreate:
listView.setAdapter(adapter);
if(savedInstanceState!=null)
{
mListInstanceState=savedInstanceState.getParcelable("listView");
listView.onRestoreInstanceState(mListInstanceState);
}
但它不起作用。我应该也重写onRestoreInstanceState还是使用其他内容?问题在于,当方向更改时,将重新创建
活动,当调用onCreate()
时,将使用默认列表项设置适配器
如果您没有为横向/纵向维护不同的布局
,只需在活动的清单中添加配置更改
即可避免活动
重新创建
android:configChanges="orientation|screenSize" // add this line
这将避免重新创建活动
,并使用相同的布局以适应屏幕宽度。确保listView布局宽度设置为match\u parent
如果您仍然希望重新创建活动
,则需要在方向更改时调用onSaveInstanceState
时记住上次选择的过滤器
@Override
public void onSaveInstanceState(Bundle outState)= {
outState.putString(“selectedFilter","some name");
super.onSaveInstanceState(outState);
}
然后在rotate之后调用onCreate
in时,您可以获得selectedFilter名称
String filterName = null;
if(savedInstanceState != null){
filterName = savedInstanceState.getString("lastFilter");
}
最后,使用基于过滤器名称的项目设置listView
if(filterName != null && filterName.equalsIgnoreCase("some name")){
// filtered list items
} else {
// default list items
}
是否保存适配器?当你旋转屏幕时,一切都会重新启动,你的代码也会再次初始化。我理解,我想这样做,然后在oncreate f.e.上开始阅读。但我不知道应该使用什么,共享参考(似乎很费力)还是其他什么?我是一个初学者:)谢谢,它可以工作:)我不得不更改filterName的初始化,因为它再次在旋转屏幕上被破坏了。