3

FragmentPagerAdapter内部用に作成されたすべてのフラグメントのインスタンスを保持しても大丈夫FragmentPagerAdapterですか?

このようなもの:

@Override
    public Object instantiateItem(ViewGroup container, int position)
        switch(position){
        case 0:
            fragment0 = super.instantiateItem(container, position);
            return fragment0;
        case 1:
            fragment1 = super.instantiateItem(container, position);
            return fragment1;
        default:
            return super.instantiateItem(container, position);
        }
    }

メモリの問題が発生しますか?

アイデアはMyFragmentPagerAdapter.fragment0、フラグメントへの参照を取得するために次のようなことを行うことです。

4

1 に答える 1

8

このアプローチの問題はFragmentManager、参照を維持していても、フラグメントの新しいインスタンスが作成される可能性があることです。そのような状況では、同じフラグメントの複数のインスタンスがメモリ内に存在し (リーク)、保持する参照は、表示さえされない可能性があるインスタンスをターゲットにします。つまり、安全ではありません。

ただし、安全なのは、フラグメント内のアクティビティの参照を維持することです。

フラグメントでオーバーライドします

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    home = (YourFragmentActivity) activity;
}

public void onCreate(Bundle savedInstanceState) {
            home.setThisFragTag(getTag());
    }

FragmentActivity で

public void ThisFragTag(String tag) {
    this.fragTag = tag;
}

アクティビティで、現在表示されているフラグメントインスタンスを保持できます

(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);

この操作を複数のフラグメントに対して繰り返すことができます

于 2012-12-03T15:18:35.047 に答える