2012-01-25 92 views
1

我正在构建一个应用程序,该接口基于此http://code.google.com/p/android-playground/,我需要在每个选项卡(即片段)中都有一个片段。这些标签都是从同一个xml中膨胀的,并且在那个xml中我有一个片段标签。在不同标签中的android片段

问题是,当创建活动时,由于选项卡中每个片段的ID都相同,因此应该转到第二个选项卡的内容先放在第一个选项卡中。

我使用此代码替换片段的标签

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

我不知道是否有可能纠正。

回答

1

你想要所有的标签有完全相同的内容?

通常,当在标签中放置片段时,每个标签会显示不同的内容,因此每个标签的xml文件并不少见。您可以为每个标签分别设置一个xml布局,每次只用一个不同的标识声明片段。没有为每个片段声明一个独立的(唯一的)id,我不知道如何获得特定片段的句柄(因为id是唯一的句柄)。

根据您的需要,您也许可以使用FragmentPagerAdapter。然后,您可以淡化当前标签片段,然后拨打public void notifyDataSetChanged()并提供新的片段。这并不是真正做到这一点的标准方式,并且不会保留在后面的堆栈中。

可选,你可以在PagerAdapter编程方式创建的每个选项卡,并设置每个片段的tag调用FragmentTransaction.add(..),然后使用该标签唯一的标签在未来片段交易忽略这个时候,它看起来并不像你可以切换fragements带有标签,身份证只是害怕。用我的第一个建议去吧!

+0

谢谢你的快速回答。 是的,我需要的片段是平等的。 因为它们显示不同的信息,但具有相同的格式。 我会试一试你的建议 –

0

我一直在努力,我后来通过访问Adapter获取标签,我从Activity后面引用Fragment的方式。

假设你使用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(); 

这感觉就像一个sad访问片段的方式,但不能依赖每个场景中的标签。另外,您必须注意仅在对Fragment的引用存在的地方引用此处。

可能有时间,这将是null。举个例子,如果你有一堆标签,他们可能会在某个时候收集垃圾。您应该通过回调在Fragment之间进行通信。此示例仅适用于少数情况。

回调方法描述在Communicating with the Activity,我会建议这种方法,如果它适合您的应用程序。这将防止在大多数情况下直接访问标签。