当我实例化三个不同的(n、n+1、n+2)片段时,我有一个 FragmentActivity。我需要在用户滑动到每个 Fragment 时保持更新,所以我在 Fragment Activity 中使用了ViewPager.SimpleOnPageChangeListener.onPageSelected,所以当用户滑动到 n+1 或 n+2 Fragment 并再次滑动到 n 时,该函数会更新内容。如果我在片段 n+1 中,不使用此解决方法,则 n 和 n+2 都已加载!相反,我希望在用户滑动到片段时加载片段,而不需要“预加载”。
这种解决方法对我来说很好,但它有一个问题:应用程序启动时列表中的第一个 n Fragment 不会加载其内容。要加载它的内容,我必须滑动到 n+1 然后返回到 n。
我知道片段的内容应该设置在实例化片段时调用的类上,并且扩展片段类,但是这样我不知道如何跟上每个片段的最新状态,就像我使用onPageSelected。
有什么建议么?
编辑 1: 我在onCreate()中以这种方式证明了我的片段:
for(int x = 0; x < 3; x++) {
Bundle b = new Bundle();
b.putString( "id" , x );
Fragment myFrag = Fragment.instantiate( myContext , Mm_FragmentPage.class.getName() );
myFrag.setArguments( b );
fragments.add(myFrag);
}
然后我在ViewPager中设置适配器:
mPagerAdapter = new PagerAdapter( super.getSupportFragmentManager() , fragments );
mPager.setAdapter( mPagerAdapter );
然后我在TitlePageIndicator中使用适配器
titleIndicator = (TitlePageIndicator) findViewById( R.id.titleFragments );
titleIndicator.setViewPager( mPager );
titleIndicator.setOnPageChangeListener( new myPageChangeListener() );
最后,PagerAdapter类:
public class PagerAdapter extends FragmentPagerAdapter
{
// fragments to instantiate in the viewpager
private List<Fragment> fragments;
// constructor
public PagerAdapter(FragmentManager fm, List<Fragment> fragments)
{
super(fm);
this.fragments = fragments;
}
// return access to fragment from position, required override
@Override
public Fragment getItem(int position)
{
return this.fragments.get(position);
}
// number of fragments in list, required override
@Override
public int getCount()
{
return this.fragments.size();
}
@Override
public CharSequence getPageTitle(int position)
{
return getResources().getStringArray( R.array.tab_header_name )[ position ];
}
}