我无法使片段通过使用Activity
的FragmentPagerAdapter
彼此通信,作为实现选项卡管理以及将ViewPager
与关联的TabHost
连接的所有详细信息的帮助程序类。我已经实现了FragmentPagerAdapter
,与Android示例项目Support4Demos提供的一样。
主要问题是,当我既没有ID也没有Tag时,如何从FragmentManager
中获得特定片段? FragmentPagerAdapter
正在创建片段并自动生成ID和代码。
[使我的片段通过使用FragmentPagerAdapter的Activity作为实现了选项卡和所有详细信息的管理的帮助器类,使我的片段彼此通信...
[我注意到在屏幕旋转时,片段被附着了,所以我用它将片段发送回活动。
我有一个托管活动,该活动正在将ViewPager与FragmentStatePagerAdapter一起使用。为了获得对由FragmentStatePagerAdapter创建的片段的引用,我在片段类内创建了一个回调接口:
if (savedInstanceState != null) {
if (mListFragment != null)
mListFragment.setListItems(items);
}
public interface Callbacks {
public void addFragment (Fragment fragment);
public void removeFragment (Fragment fragment);
}
只是去尝试这个代码,
public class MYFragmentPAdp extends FragmentPagerAdapter {
public MYFragmentPAdp(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
if (position == 0)
Fragment fragment = new Fragment1();
else (position == 1)
Fragment fragment = new Fragment2();
return fragment;
}
}
我根据以下帖子找到了关于我的问题的答案:Fragments
您不需要重写findFragmentByTag()
,也不必依靠使用内部private String getFragmentTag(int viewPagerId, int fragmentPosition)
{
return "android:switcher:" + viewPagerId + ":" + fragmentPosition;
}
方法创建片段标签的兼容性。 FragmentPagerAdapter
是一个public
startUpdate
protected Hashtable<Integer, WeakReference<Fragment>> fragmentReferences;
@Override
public Fragment getItem(int position) {
Fragment fragment;
switch(position) {
case 0:
fragment = new MyFirstFragmentClass();
break;
default:
fragment = new MyOtherFragmentClass();
break;
}
fragmentReferences.put(position, new WeakReference<Fragment>(fragment));
return fragment;
}
将为空,因为不会调用public Fragment getFragment(int fragmentId) {
WeakReference<Fragment> ref = fragmentReferences.get(fragmentId);
return ref == null ? null : ref.get();
}
。 下面的类处理这种情况:
这是一种不依赖FragmentPagerAdapter的实现来获取标签的方法。覆盖InstantiateItem(),它将返回从getItem()创建或从片段管理器找到的片段。
fragmentReferences
。确实依赖于您知道片段的索引-但这将在getItem()中设置(仅在实例化时)getItem