Хранить экземпляры фрагментов внутри FragmentPagerAdapter

Можно ли сохранить экземпляр каждого фрагмента, созданного для 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, чтобы получить ссылку на фрагмент.

Ответ 1

Проблема с этим подходом заключается в том, что 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);

Вы можете повторить эту операцию для нескольких фрагментов