Android:在标签式应用中保留listview内容的最佳方式?

时间:2013-06-06 10:44:29

标签: java android listview android-viewpager fragment

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

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

问题是当用户再次切换到另一个选项卡并且调用Fragment的OnCreateView方法(将ListView初始化为空)时,下载并添加到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。

干杯

1 个答案:

答案 0 :(得分:1)

“正确”方式:

使用Fragment.onSaveInstanceState(Bundle)Fragment.onActivityCreated(Bundle)来保存和恢复您的商品

便宜的方式:

在托管片段

的活动上设置android:configChanges="orientation|keyboardHidden|screenSize"

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

详细了解所有这些here