因此,我正在尝试使用 Android 支持 v4 库中的 ViewPager,但它(或 FragmentPagerAdapter)如何处理片段存在一些严重问题。例如,我将 FragmentPagerAdapter 子类化以执行以下操作:
public class MyPagerAdapter extends FragmentPagerAdapter
{
private ArrayList<Fragment> fragments = null;
private ArrayList<Data> data = null;
public MyPagerAdapter(FragmentManager fragmentManager, ArrayList<Data> data)
{
super(fragmentManager);
this.data = data;
fragments = new ArrayList<Fragment>();
for(Data datum : data)
{
MyDataFragment fragment = new MyDataFragment();
fragment.setData(datum);
fragments.add(fragment);
}
}
@Override
public Fragment getItem(int i)
{
return fragments.get(i);
}
@Override
public int getCount()
{
return fragments.size();
}
}
现在,我认为这已经足够了,我可以继续使用Fragments 通常实现MyDataFragment
的方法来实现。onCreateView
但是我遇到了一个有趣的问题。当我离开 Activity,然后回到它时,ViewPager 会显示为空白。不知何故,它通过调用 findFragmentByTag 来重用 Fragments,然后根本不调用getItem
,等等。更糟糕的是,Fragment 不会收到任何onCreateView
事件。所以我想我可以通过移动我的代码来利用 ViewPager 的片段缓存onCreateView
,该代码主要抓取对片段膨胀的各种视图的引用,到onAttach
. 唯一的问题是,在 期间onAttach
,MyDataFragment 的getView
方法总是返回 null。在线片段的所有示例都描述了onCreateView
应该有你所有的视图设置代码。好的。但是,当我创建类似 的方法时MyDataFragment.setSomeField(String value)
,我需要使用对TextView
. 由于onCreateView
并不总是被调用(例如,当 FragmentPagerAdapter 神奇地回收 Fragment 时),最好在onAttach
. 但是,在 期间onAttach
,Fragment 的根视图仍然为空(可能是因为onCreateView
一开始没有调用)!之后没有其他事件发生(除了onActivityCreated
,它与 Fragment 本身无关),所以没有地方可以做设置代码。这应该如何工作?我在这里遗漏了什么重要的东西,还是由猴子设计的 Fragment 系统?