2013-10-12 12 views
33

私はFragmentPagerAdapterを使用するアプリケーションを作成しています。アダプターのフラグメントは、外部データに従って更新する必要がありますが、それは起こりません。私はフラグメントクラスのみのgetItem機能で、一度インスタンス化されていることに気づい:FragmentPagerAdapterのgetItemはいつ呼び出されますか?

@Override 
public Fragment getItem(int position) { 
    TabInfo info = mTabs.get(position); 
    return Fragment.instantiate(mContext, info.clss.getName(), 
       info.args); 
} 

私はクラスを削除し、新しいものを使用した場合でも、何も助けない - このメソッドは、一度だけ呼ばれ、その最初の時間をタブにデータが入力された後、再び表示されません。誰でも理由が分かりますか?

ありがとうございます!

答えて

46

アダプタがフラグメントを必要とし、フラグメントが存在しない場合は常にgetItemが呼び出されます。

フラグメントがFragmentManagerにすでに存在する場合は、インスタンス化する必要はなく、getItemを呼び出す必要はありません。

既存のフラグメントを更新するには、フラグメントをFragmentManagerまたはアダプタから取得し、それに応じて操作する必要があります。

デフォルトでは、ビューページは表示ページとそれに隣接するページのフラグメントを作成します。つまり、位置1と2の断片から始めます。ページ2にスワイプすると、位置3の断片が作成されます。

+0

それがフラグメントを破壊することが可能であるFragmentPagerAdapterの? –

+2

http://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android – Kuffs

+0

http://stackoverflow.com/questions/15212309/cannot-remove-fragment-from-viewpager-why – Kuffs

14

上記の答えよりも具体的には、getItemが呼び出されますFragmentPagerAdapterのinstantiateItem(ViewGroupコンテナ、int位置)メソッド。念のために役立つこと:)

3

シンプルな使用FragmentStatePagerAdapter代わり

+2

なぜですか? EXPLAIN ............. –

関連する問題