Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 旋转后将数据存储到自己的适配器中_Android_Listview_Rotation - Fatal编程技术网

Android 旋转后将数据存储到自己的适配器中

Android 旋转后将数据存储到自己的适配器中,android,listview,rotation,Android,Listview,Rotation,我有一个带有listview的应用程序(一行包含textview、imageview、ratingbar)和我自己的适配器。当我在排序listview后旋转屏幕时(我在菜单中选择此选项),它会在排序前返回到窗体。 我尝试覆盖SaveInstanceState: @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.

我有一个带有listview的应用程序(一行包含textview、imageview、ratingbar)和我自己的适配器。当我在排序listview后旋转屏幕时(我在菜单中选择此选项),它会在排序前返回到窗体。 我尝试覆盖SaveInstanceState:

    @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的初始化,因为它再次在旋转屏幕上被破坏了。