不同标签中的android片段

时间:2012-01-25 17:04:07

标签: android

我正在构建一个界面基于此http://code.google.com/p/android-playground/的应用程序,我需要在每个选项卡中包含一个片段(即片段)。这些标签都是从同一个xml中充气的,而在那个xml中我有一个片段标签。

问题在于,当创建活动时,由于选项卡中每个片段的ID相等,应该转到第二个选项卡的内容进入第一个。

我使用此代码替换选项卡中的片段

FragmentTransaction ft = x.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

我不知道是否可以纠正这个问题。

2 个答案:

答案 0 :(得分:1)

您希望所有标签都具有完全相同的内容吗?

通常,当将片段放入选项卡时,每个选项卡都会显示不同的内容,因此每个选项卡的xml文件并不罕见。您可以为每个选项卡创建一个单独的xml布局,每次只使用不同的ID声明您的片段。如果没有为每个片段声明一个单独的(读取唯一的)id,那么我就不知道获得特定片段句柄的高效/简单操作(因为id是唯一句柄)。

您也可以根据自己的需要使用FragmentPagerAdapter。然后,您可以淡出当前标签片段,然后调用public void notifyDataSetChanged ()并提供新片段。这不是真正的标准方式,但不会保留在后台。

您可以选择在PagerAdapter中以编程方式创建每个标签,并在调用FragmentTransaction.add(..)时为每个片段设置tag,然后在将来的片段事务中使用此标签唯一标记忽略这个,它看起来不像你可以用标签切换fragements,id只是害怕。按照我的第一个建议去吧!

答案 1 :(得分:0)

我也在努力解决这个问题,以及我稍后从Fragment引用Activity的方式是访问标签Adapter

假设你使用Adapter,你可以做类似的事情

private mTabsAdapter;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // etc

    this.mTabsAdapter = new TabsAdapter(this, this.mViewPager);

    // Tab1
    Tab tab = actionBar.newTab();
    this.mTabsAdapter.addTab(tab, MyFragment1.class, null);

    // Tab2
    tab = actionBar.newTab();
    this.mTabsAdapter.addTab(tab, MyFragment2.class, null);
}

public MyFragment1 getTab1() {
    return (MyFragment1)this.mTabsAdapter.getItem(0);
}

public MyFragment2 getTab2() {
    return (MyFragment2)this.mTabsAdapter.getItem(1);
}

然后在你的片段中,你将有一个方法来访问

public class MyFragment1 {
    // ...

    public void reloadData() {
        // reload data here
    }
}

现在您可以访问Fragment,例如

this.getTab1.reloadData();

这感觉就像访问片段的悲伤方式,但在每种情况下都不能依赖于Tag。此外,您必须注意仅在Fragment的引用存在的情况下引用它。

有时可能 null 。例如,如果你有一堆标签,它们可能会在某些时候被垃圾收集。你应该通过回调在Fragment之间进行通信。此示例仅适用于少数几种情况。

回调方法在Communicating with the Activity中描述,如果适合您的应用,我建议使用此方法。这样可以防止在大多数情况下直接访问制表符。