我有一个常见的列表片段,我将其重复用于对不同的列表进行充气。
我按照@DevrimTuncer提供的答案this Question来实现它。
考虑使用相同的列表片段,我有两个列表产品和销售。
如果我从导航栏中选择了产品,则会加载一个包含与产品相关的数据的新片段片段。
同样,如果单击“销售”选项,则会创建与销售相关的新实例。
考虑以下情况,
如果我选择“产品”选项,然后选择“销售”选项,请单独选 创建列表片段的实例,当前是Sales 列表将可见。产品列表将位于后台。
此外,如果我选择产品选项,则产品列表将是 从堆栈中弹出。但它包含与销售相关的数据 列表(以某种方式列表片段中与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是唯一的。
我有点坚持这个。
答案 0 :(得分:1)
我终于能够发现问题所在。我的结局是一个小错误。
我使用静态变量将片段实例保存在List Fragment中。所以下面的情况发生了。
1)创建产品清单。
创建列表片段的新实例,并创建指向内存的静态变量。
2)创建销售清单。
创建了一个新的列表片段实例,但静态变量被重用,因为它是静态的,并被分配了一个新的值。
3)从后台堆叠弹出产品列表。
静态变量仍保留前一个值,并在其中存储了sales片段实例。因此弹出的片段显示错误的列表。
我刚删除静态变量并将其替换为普通变量,问题就解决了。