繁体   English   中英

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

[英]Android: Best way to retain listview content in fragment in tabbed app?

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

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

问题是,当用户再次切换到另一个选项卡/上一步,并且调用了Fragment的OnCreateView方法(将ListView初始化为空)时,下载并添加到ListView的数据消失了。

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

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”变量是否为null,如果不为null则再次填充ListView。 当用户注销时,我只是将activeCerts设置为null。

干杯

“正确”的方式:

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

便宜的方式:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM