【问题标题】:Tab bar with fragments - add fragments带有片段的标签栏 - 添加片段
【发布时间】:2016-01-04 13:11:49
【问题描述】:

我已经使用 ViewPager 和带有列表视图的片段实现了一个标签栏。当点击其中一个列表项时,我有一个回调到将处理该操作的 MainActivity。现在我必须在右侧选项卡中的现有片段之上添加另一个片段。我试试

        Bundle args = new Bundle();
        args.putInt("Tab", tab);
        args.putIntegerArrayList("Sel", sel);
        sel.add(position);
        Tab1Fragment newFragment = new Tab1Fragment();
        newFragment.setArguments(args);
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.content, newFragment);
        transaction.addToBackStack(null);
        transaction.commit();

此代码有效,但不一定在我想要的选项卡上。 我有四个选项卡,每个选项卡都有一个片段。因此,我必须解决发生该动作的正确片段。我的四个片段中的哪一个会被这段代码覆盖?我如何在这里处理特定的片段?

【问题讨论】:

  • R.id.content 是您的 ViewPager 吗?
  • 在您想要另一个片段的选项卡中,在该片段中使用 frameLayout,然后在该帧中为您的片段充气。

标签: android android-fragments


【解决方案1】:

我从您的问题中了解到,您想在单击列表项的当前片段上添加一个片段...如果是这种情况,请提供您当前片段的 id(R.id.content 即在您的情况下)基本布局(一般情况下为 FrameLayout)。一般来说,如果你想添加一个片段,那么容器基础布局应该是 FrameLayout。这样新的片段视图就可以覆盖在片段的当前视图上。

如果不是这样,请告诉我......

【讨论】:

  • 问题是另一个问题。对于所有四个片段,我确实使用相同的“sel”空实例初始化了参数“Sel”。当我不得不在一个片段中修改此参数时,它在其他片段中也具有相同的值。因此,其他片段的行为与实际片段完全相同。这就是为什么我有这样的印象,错误的部分已经被解决了。 (我对所有四个选项卡使用相同的 Tab1Fragment。它们显示的内容取决于参数。相同的参数 = 相同的显示。)
  • @thpitsch 至于“Sel”,你将传递一个数组列表。当我们传递一个可序列化对象时,它会变成一个新对象,其引用与你所拥有的不同。因此,稍后当您使用列表引用进行任何更改时,您不会影响当前的片段列表元素。如果您想稍后更新片段视图,请参考片段并直接使用方法进行更新。
  • 你是对的,arraylist本身变成了一个新对象。但是在“args.putIntegerArrayList("Sel", sel)”我放了一些东西,之前声明为“ArrayList sel = new ArrayList()”。当我把它放在不同的包上时,这个“sel”是同一个对象。如果我改变它,这个改变对所有片段都有效。现在我执行 "args.putIntegerArrayList("Sel", new ArrayList())" 问题就消失了。
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多