FragmentPagerAdapterを使用するアプリケーションを作成しています。アダプター内のフラグメントは、外部データに従って更新する必要がありますが、それは起こりません。フラグメントクラスは、getItem関数で1回だけインスタンス化されることに気付きました。
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(),
info.args);
}
クラスを削除して新しいクラスを使用しても、何の助けにもなりません。このメソッドは、タブが最初に読み込まれたときに一度だけ呼び出され、それ以降は呼び出されません。誰もが理由を知っていますか?
ありがとう!
getItemは、アダプターがフラグメントを必要とし、フラグメントが存在しない場合に呼び出されます。
フラグメントがFragmentManagerに既に存在する場合、インスタンス化する必要はなく、getItemを呼び出す必要はありません。
既存のフラグメントを更新するには、FragmentManagerまたはアダプターからフラグメントを取得し、それに応じて操作する必要があります。
デフォルトでは、viewpagerは可視ページとその隣のページのフラグメントを作成します。つまり、位置1と2のフラグメントから始めます。ページ2にスワイプすると、位置3のフラグメントが作成されます。
上記の答え(より正確です!)よりも具体的にするために、getItemはFragmentPagerAdapterのinstantiateItem(ViewGroup container、int position)メソッドによって呼び出されます。念のため:)
FragmentStatePagerAdapter
の代わりにFragmentPagerAdapter
を使用する