我可以使用<fragment>标签来布置一个ActionBarSherlock TabsPager的片段吗?</fragment>

时间:2012-05-02 21:52:00

标签: android android-fragments android-tabhost android-viewpager

我有一个带有标签和ViewPager的多片段ABS片段活动,但是对于我的应用程序的实际功能,我需要能够抓住片段并与它们通信。为了能够调用findFragmentById(),片段需要ID,如果我理解正确的话,要求他们有<fragment&gt;标记或由FragmentTransaction创建。我正在使用的TabsAdapter / ViewPager代码使用Fragment.instantiate()从Fragment类创建片段,这不允许设置ID。

那么,有关如何将标签与ViewPager一起使用或使用FragmentTransaction创建标签片段的任何想法?我可以很容易地在我的TabsAdapter中实现我自己的id / fragment映射,但如果可以,我宁愿使用标准机制。

1 个答案:

答案 0 :(得分:0)

FragmentPagerAdapter使用名为makeFragmentName的私有方法标记它包含的所有Fragment-tabs。

这是一个脆弱的解决方案,但从ABS 4.0.2开始工作。你需要知道你正在寻找的片段的位置索引

老实说,你应该使用自己的,不那么脆弱的解决方案。至少那时你将掌控它何时/如何打破。

public Fragment getFragmentByPosition(ViewPager container, int position) {
    String name = makeFragmentName(container.getId(), position);
    return  mFragmentManager.findFragmentByTag(name);
}

//WARNING: this will break if ABS changes this method.
private static String makeFragmentName(int viewId, int index) {
    return "android:switcher:" + viewId + ":" + index;
}