android:在标签应用程序中以片段形式保留listview内容的最佳方法?

6ss1mwsb  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(385)

首先,这是我关于stackoverflow的第一个问题,所以请原谅任何格式问题等。
我正在编写一个android平板电脑应用程序,它允许用户用从web服务中提取的内容填充listview。此时有一个活动包含一个viewpager,它在不同的页面上包含6个片段。
问题是,当用户再次切换到另一个tab/back并调用片段的oncreateview方法(将listview初始化为空)时,下载并添加到listview的数据就会消失
除了将listview的内容存储在数据库/sharedprefs中之外,还有什么更好的方法来保存它呢。当用户注销/重新启动应用程序时,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。
干杯

wqlqzqxt

wqlqzqxt1#

“正确”方式:
使用 Fragment.onSaveInstanceState(Bundle) 以及 Fragment.onActivityCreated(Bundle) 保存和还原项目
便宜的方式:
android:configChanges="orientation|keyboardHidden|screenSize" 在你的活动中托管片段
你也可以 setRetainInstance(true);onCreate() 你的碎片
在这里阅读更多关于这一切的信息。

相关问题