web-dev-qa-db-ja.com

FragmentPagerAdapterのgetItemはいつ呼び出されますか?

FragmentPagerAdapterを使用するアプリケーションを作成しています。アダプター内のフラグメントは、外部データに従って更新する必要がありますが、それは起こりません。フラグメントクラスは、getItem関数で1回だけインスタンス化されることに気付きました。

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

クラスを削除して新しいクラスを使用しても、何の助けにもなりません。このメソッドは、タブが最初に読み込まれたときに一度だけ呼び出され、それ以降は呼び出されません。誰もが理由を知っていますか?

ありがとう!

37
n00b programmer

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

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

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

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

50
Kuffs

上記の答え(より正確です!)よりも具体的にするために、getItemはFragmentPagerAdapterのinstantiateItem(ViewGroup container、int position)メソッドによって呼び出されます。念のため:)

18
user3412580

FragmentStatePagerAdapterの代わりにFragmentPagerAdapterを使用する

1
Neo