gpt4 book ai didi

java - Android:在选项卡式应用程序的 fragment 中保留 ListView 内容的最佳方式?

转载 作者:行者123 更新时间:2023-11-30 03:33:51 25 4
gpt4 key购买 nike

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

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

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

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

ListView容器 fragment 的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 变量是从网络服务获取的证书对象的数组列表。

编辑

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

干杯

最佳答案

“正确”方式:

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

便宜的方式:

在托管 fragment 的 Activity 上设置 android:configChanges="orientation|keyboardHidden|screenSize"

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

阅读更多关于这一切的信息 here .

关于java - Android:在选项卡式应用程序的 fragment 中保留 ListView 内容的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16960083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com