我有一个带有标签和ViewPager的多片段ABS片段活动,但是对于我的应用程序的实际功能,我需要能够抓住片段并与它们通信。为了能够调用findFragmentById(),片段需要ID,如果我理解正确的话,要求他们有<fragment
&gt;标记或由FragmentTransaction创建。我正在使用的TabsAdapter / ViewPager代码使用Fragment.instantiate()从Fragment类创建片段,这不允许设置ID。
那么,有关如何将标签与ViewPager一起使用或使用FragmentTransaction创建标签片段的任何想法?我可以很容易地在我的TabsAdapter中实现我自己的id / fragment映射,但如果可以,我宁愿使用标准机制。
答案 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;
}