0

我有一个带有标签的多片段 ABS 片段活动,并且 ViewPager 工作得很好,但是对于我的应用程序的实际功能,我需要能够获取片段并与它们进行通信。为了能够调用 findFragmentById(),片段需要 ID,这(如果我理解正确的话)要求它们具有<fragment> 标记或由 FragmentTransaction 创建。我使用的 TabsAdapter/ViewPager 代码使用 Fragment.instantiate() 从 Fragment 类创建片段,它不允许设置 ID。

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

4

1 回答 1

0

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

这是一个脆弱的解决方案,但从 ABS 4.0.2 开始可以使用。您需要知道要查找的 Fragment 的位置索引

老实说,您应该只使用自己的、不那么脆弱的解决方案。至少那时您将控制它何时/如何中断。

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;
}
于 2012-05-02T23:38:55.140 回答