Java Android:在选项卡式应用程序中以片段形式保留listview内容的最佳方法?

Java Android:在选项卡式应用程序中以片段形式保留listview内容的最佳方法?,java,android,listview,android-viewpager,fragment,Java,Android,Listview,Android Viewpager,Fragment,首先,这是我关于StackOverflow的第一个问题,所以请原谅任何格式问题等 我正在编写一个Android平板电脑应用程序,它允许用户使用从web服务中提取的内容填充ListView。此时,有一个活动包含一个ViewPager,其中包含不同页面上的6个片段 问题在于,当用户再次切换到另一个选项卡/返回时,下载并添加到ListView的数据消失,并且调用片段的OnCreateView方法(将ListView初始化回空) 除了将listview的内容存储在数据库/sharedprefs中之外,保

首先,这是我关于StackOverflow的第一个问题,所以请原谅任何格式问题等

我正在编写一个Android平板电脑应用程序,它允许用户使用从web服务中提取的内容填充ListView。此时,有一个活动包含一个ViewPager,其中包含不同页面上的6个片段

问题在于,当用户再次切换到另一个选项卡/返回时,下载并添加到ListView的数据消失,并且调用片段的OnCreateView方法(将ListView初始化回空)

除了将listview的内容存储在数据库/sharedprefs中之外,保存listview内容的最佳方法是什么。当用户注销/重新启动应用程序时,需要销毁listview中的数据,因此我希望不会以任何方式保留它

ListView容器片段的OnCreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle     savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_certificate_list, container, false);
    return rootView;
}
下面是当用户点击下载按钮时填充ListView的代码:

ListView lv = (ListView) callerActivity.findViewById(R.id.listView1);
lv.setAdapter(new CertListAdapter(callerActivity.getBaseContext(), activeCerts));
if (activeCerts.size() > 0) {
       ((TextView) callerActivity.findViewById(R.id.certStatusLabel)).setVisibility(View.GONE);
} else {
        ((TextView) callerActivity.findViewById(R.id.certStatusLabel)).setText(callerActivity.getString(R.string.certsDontExist));
}
activeCerts变量是从web服务获取的证书对象的arraylist

编辑

找到了解决方案,只需检查onCreateView方法中的“activeCerts”变量是否为null,如果不为null,则再次填充ListView。当用户注销时,我会将activeCerts设置为null

干杯

正确的方式:

使用
Fragment.onSaveInstanceState(Bundle)
Fragment.onActivityCreated(Bundle)
保存和还原项目

廉价方式:

在托管片段的活动上设置android:configChanges=“定向|键盘隐藏|屏幕大小”

您还可以
setRetainInstance(true)在片段的
onCreate()

阅读更多关于这一切的信息。

正确的方式:

使用
Fragment.onSaveInstanceState(Bundle)
Fragment.onActivityCreated(Bundle)
保存和还原项目

廉价方式:

在托管片段的活动上设置android:configChanges=“定向|键盘隐藏|屏幕大小”

您还可以
setRetainInstance(true)在片段的
onCreate()


阅读更多信息。

谢谢你的回答,比我提出的乱七八糟的答案要优雅得多。在Fragment上没有“onRestoreInstanceState()”方法,你需要在“onActivityCreated”方法上执行此操作。谢谢你的回答,比我提出的乱七八糟的答案要优雅得多。在Fragment上没有“onRestoreInstanceState()”方法,您需要在方法“onActivityCreated”上执行此操作。