22

FragmentPagerAdapter を使用した ViewPager があり、以前はアプリで 2 つのフラグメント (異なるタイプ) のみを問題なく使用していました。

ただし、3 つ目のフラグメントを追加したところ、アダプター/ビューページャーから離れたときにフラグメントが破棄されているようです。たとえば、1 ページ目にいる場合、3 ページに近づくと、3 ページが破棄されて再作成されます。3ページ目にいる場合、1ページ目でも同じことが起こります。

これにより、アプリで多くの問題が発生しています。フラグメントは RAM をまったく消費しないので、どうすればこれを防ぐことができますか?

4

2 に答える 2

52

ViewPager.setOffscreenPageLimit()を探していると思います。

あなたの場合、以下はフラグメントをメモリに保持し、破壊しないようにする必要があります。

ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setOffscreenPageLimit(2);

ただし、破棄されたときにビューステートを正しく保存していないと思われます。フラグメントは、破棄/再作成を正しく処理する必要があります。たとえば、方向の変更が発生した場合、フラグメントも破棄されて再作成されます。また、ユーザーがアプリケーションを離れ、システムが後でメモリを必要とし、Activity を破棄した場合にも発生する可能性があります。再開して以前と同じ状態にできるはずです。これが実際に問題である場合は、onSaveInstanceState()で状態を保存することを検討してください。保存された状態は、フラグメントの状態を破棄された状態と同じになるように初期化できるonCreateで表示されます。

于 2012-11-07T15:57:14.273 に答える
5

FragmentpagerAdapter でこのメソッドをオーバーライドするだけです

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
       // TODO Auto-generated method stub
       super.destroyItem(ViewGroup container, int position, Object object);
}

削除するsuper.destroyItem(ViewGroup container, int position, Object object);

あなたのコードから

于 2015-08-19T04:54:57.843 に答える