5

ViewPager私はによって移入されたを持っていFragmentPagerAdapterます。最初のアダプターからもう 2 つ変更したい。問題は、以前に (最初のアダプターを持っている間に) ロードされたすべてのページがまだ古いページであることです。

のソースコードを見てFragmentPagerAdapter、実装が原因で問題が発生していると推測しinstatiateItem()ます。位置とコンテナ ID を持つタグを使用して、メソッドはFragmentその位置にすでに があるかどうかを確認します。このタグでがFragmentあれば付いています。新しいアダプタを設定しても、コンテナの ID と位置は変更されないため、古いFragments が検出されます。

古いフラグメントをすべて削除する方法を知っていますか?

4

1 に答える 1

11

Fragment タグは、位置ではなくによって取得された ID を使用していることに気付きましたgetItemId()。私の問題を解決するために、異なるsgetItemId()でまったく異なる ID を上書きして使用しました。FragmentPagerAdapter

@Override
public long getItemId(int position) {
    return mPagerId*100+position;
}

mPagerId は、コンストラクターで割り当てられる一意の整数です。100 ページを超える場合は、100 を 1000 に置き換える必要があります。

于 2012-07-29T16:04:19.373 に答える