3 つの異なる (n、n+1、n+2) フラグメントをインスタンス化すると、FragmentActivity が得られます。ユーザーがスワイプしたときに各フラグメントを更新し続ける必要があるため、Fragment アクティビティでViewPager.SimpleOnPageChangeListener.onPageSelectedを使用しました。ユーザーが n+1 または n+2 Fragment にスワイプし、再び n にスワイプすると、コンテンツが更新されます。Fragment n+1 にいる場合、この回避策を使用しないと、n と n+2 の両方が既にロードされています! 代わりに、「プリロード」せずに、ユーザーがスワイプしたときに Fragment が読み込まれるようにしたいと思います。
この回避策は私にとってはうまくいきますが、問題があります。アプリの起動時にリストの最初にある n Fragment がそのコンテンツをロードしません。そのコンテンツをロードするには、n+1 までスワイプしてから n に戻る必要があります。
Fragment のコンテンツは、Fragment クラスを拡張するフラグメントのインスタンス化の瞬間に呼び出されるクラスに設定する必要があることを知っていますが、この方法では、各 Fragment を最新の状態に保つ方法がわかりません。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 ];
}
}