1

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

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

问题是当用户再次切换到另一个选项卡/返回并调用 Fragment 的 OnCreateView 方法(将 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 服务获得的证书对象的数组列表。

编辑

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

干杯

4

1 回答 1

1

“正确”方式:

使用Fragment.onSaveInstanceState(Bundle)Fragment.onActivityCreated(Bundle)保存和恢复您的项目

便宜的方式:

android:configChanges="orientation|keyboardHidden|screenSize"在托管片段的活动上设置

你也可以setRetainInstance(true);onCreate()你的 Fragment

在此处阅读有关这一切的更多信息。

于 2013-06-06T10:52:48.480 回答