gpt4 book ai didi

android - 在后台堆栈中添加同一 fragment 的多个实例,先前添加的实例的数据仍然存在

转载 作者:行者123 更新时间:2023-11-30 00:35:56 26 4
gpt4 key购买 nike

我有一个通用的 List Fragment,我会重复使用它来扩充不同的列表。

我遵循@DevrimTuncer 提供的答案 this Question实现它。

假设我有两个列表 ProductSales 使用相同的列表 fragment 进行扩充。

如果我从抽屉导航中选择产品,则会加载一个包含与产品相关数据的新列表 fragment 。

同样,如果我点击“销售”选项,则会创建一个与销售相关的新实例。

考虑以下场景,

  1. 如果我选择 Products 选项,然后选择 Sales 选项,分开列表 fragment 的实例已创建,目前,Sales列表将可见。产品列表将在后台堆栈中。

  2. 此外,如果我选择产品选项,产品列表将是从堆栈中弹出。但它包含与销售相关的数据列表(列表 fragment 中的参数与 B 相关坚持)。

我在膨胀 fragment 时为产品和销售列表 fragment 使用唯一标签。

下面是我用来膨胀 fragment 的方法。

private void openListFragment(Bundle arguments, String listName)
{
boolean fragmentPopped = mFragmentManager.popBackStackImmediate (listName, 0);

if(!fragmentPopped && mFragmentManager.findFragmentByTag(listName) == null)
{
mFragmentManager
.beginTransaction()
.replace(R.id.list_container, ListFragment.newInstance(arguments))
.addToBackStack(listName)
.commit();
}
}

listName 参数对于 A 和 B 是唯一的。

我有点被这个困住了。

最佳答案

我终于能够找出问题所在。这是我的一个小错误。

我使用静态变量将 fragment 实例保存在列表 fragment 中。所以下面的场景发生了。

1) 创建产品列表。

创建列表 fragment 的新实例并创建指向内存的静态变量。

2) 创建销售 list 。

创建了列表 fragment 的新实例,但静态变量被重新使用,因为它是静态的并被分配了一个新值。

3) 从返回堆栈中弹出产品列表。

静态变量仍然保存着以前的值,并在其中存储了销售 fragment 实例。因此,弹出的 fragment 显示了一个错误的列表。

我只是删除了静态变量并用普通变量替换它,问题就解决了。

关于android - 在后台堆栈中添加同一 fragment 的多个实例,先前添加的实例的数据仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409975/

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