将片段添加到LinearLayout,结果不是正确的ORDER

时间:2014-12-26 11:15:10

标签: android layout android-fragments

这是一个非常奇怪的问题,在发布之前我一直在挠头。

直接遇到问题:我的活动中LinearLayout内有ScrollView我使用FragmentManager将我的片段抽入布局,每个片段都有其独特的标签和用户界面,代码效果很好。

...
for(object o: my_data)
{
    MyFragment f = MyFragment.newInstance(o.blah());
    Log.w("app","adding object "+o.tag_name()+"to the list");
    transaction.add(R.id.my_linear_layout_id, f, o.tag_name());
}
transaction.commit();

假设我有3个带有标签的对象" 1"," 2"," 3"在my_data中。上面代码的结果将以正确的顺序1,2,3显示我的碎片。在我的UI中,它们是从LinearLayout顶部到底部的1,2,3。像

1 2 3

当我尝试删除所有片段并再次使用相同的代码添加它们时,会出现奇怪的问题。(如刷新)

...
ft = frag_manager.beginTransaction();
for(object o: my_data)
{
    ft.remove(frag_manager.findFragmentbyTag(o.tag_name()));    
}
ft.commit();

结果将在我的LinearLayout上从上到下反转:

第3 2 1

虽然我的日志显示1,2,3已分别添加到布局中。

我多次尝试并测试代码,发现第一次结果总是正确的,但是在任何全部删除操作之后,新结果将被反转,结果将不再正确。这个问题背后的原因是什么?我错过了什么?这是疯狂的imo。

1 个答案:

答案 0 :(得分:0)

单个FragmentTransaction上的操作顺序并非始终受到尊重。

您应该尝试在每个操作中创建新闻FragmentTransacion并按您所需的顺序提交它们。 Related link