首先,这是我关于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。
干杯
1条答案
按热度按时间wqlqzqxt1#
“正确”方式:
使用
Fragment.onSaveInstanceState(Bundle)
以及Fragment.onActivityCreated(Bundle)
保存和还原项目便宜的方式:
套
android:configChanges="orientation|keyboardHidden|screenSize"
在你的活动中托管片段你也可以
setRetainInstance(true);
在onCreate()
你的碎片在这里阅读更多关于这一切的信息。