在后台堆栈中添加同一片段的多个实例,先前添加的实例的数据仍然存在
Adding Multiple instance of the same fragment in back-stack, data of previous added instance persists
我有一个通用的 List Fragment,我重复使用它来扩充不同的列表。
我按照@DevrimTuncer 提供的答案 this Question 来实现它。
假设我有两个列表 Product 和 Sales 使用相同的列表片段膨胀。
如果我 select 导航抽屉中的产品,则会加载一个新的列表片段,其中包含与 Products 相关的数据。
同样,如果我点击销售选项,则会创建一个与销售相关的新实例。
考虑以下情况,
如果我 select 产品选项后跟销售选项,分开
列表片段的实例已创建,目前,Sales
列表将可见。产品列表将在后台堆栈中。
此外,如果我 select 产品选项,产品列表将是
从堆栈中弹出。但它包含与销售相关的数据
列表(列表片段中的参数与 B 相关
坚持)。
我在扩充片段时为产品和销售列表片段使用唯一标签。
下面是我用来给片段充气的方法。
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 是唯一的。
我有点被这个困住了。
我终于能够找出问题所在。这是我的一个小错误。
我使用静态变量将片段实例保存在列表片段中。所以下面的场景发生了。
1) 创建产品列表。
创建列表片段的新实例并创建指向内存的静态变量。
2) 创建销售列表。
创建了列表片段的新实例,但重新使用了静态变量,因为它是静态的并被分配了一个新值。
3) 从返回堆栈中弹出产品列表。
静态变量仍然保存着以前的值,并在其中存储了销售片段实例。因此,弹出的片段显示了错误的列表。
刚刚把静态变量去掉,换成普通变量,问题就解决了。
我有一个通用的 List Fragment,我重复使用它来扩充不同的列表。
我按照@DevrimTuncer 提供的答案 this Question 来实现它。
假设我有两个列表 Product 和 Sales 使用相同的列表片段膨胀。
如果我 select 导航抽屉中的产品,则会加载一个新的列表片段,其中包含与 Products 相关的数据。
同样,如果我点击销售选项,则会创建一个与销售相关的新实例。
考虑以下情况,
如果我 select 产品选项后跟销售选项,分开 列表片段的实例已创建,目前,Sales 列表将可见。产品列表将在后台堆栈中。
此外,如果我 select 产品选项,产品列表将是 从堆栈中弹出。但它包含与销售相关的数据 列表(列表片段中的参数与 B 相关 坚持)。
我在扩充片段时为产品和销售列表片段使用唯一标签。
下面是我用来给片段充气的方法。
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 是唯一的。
我有点被这个困住了。
我终于能够找出问题所在。这是我的一个小错误。
我使用静态变量将片段实例保存在列表片段中。所以下面的场景发生了。
1) 创建产品列表。
创建列表片段的新实例并创建指向内存的静态变量。
2) 创建销售列表。
创建了列表片段的新实例,但重新使用了静态变量,因为它是静态的并被分配了一个新值。
3) 从返回堆栈中弹出产品列表。
静态变量仍然保存着以前的值,并在其中存储了销售片段实例。因此,弹出的片段显示了错误的列表。
刚刚把静态变量去掉,换成普通变量,问题就解决了。