我正在使用'一旦用戶離開時銷燬所有活動'來模擬操作系統殺死我的應用程序來測試我的應用程序。無法理解FragmentPagerAdapter在活動破壞下的工作方式
在我的主要活動,在的onCreate,我實例的所有片段,將它們添加到列表,然後:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), fragments);
mViewPager = (ViewPager) super.findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
下面是適配器代碼:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public SectionsPagerAdapter(FragmentManager fragmentManager, List<Fragment> fragments) {
super(fragmentManager);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0: return getString(R.string.section_one);
case 1: return getString(R.string.section_two);
case 2: return getString(R.string.section_three);
case 3: return getString(R.string.section_four);
}
return null;
}
}
現在的問題(崩潰)在這裏,在一個動作欄項目:
case R.id.action_refresh:
PostsFragment fragment = (PostsFragment) mSectionsPagerAdapter.getItem(mViewPager.getCurrentItem());
fragment.reloadDataFromServer();
說活動被打開,然後在後面銷燬b utton。當我返回到此活動並按刷新操作項目時,應用程序崩潰。爲什麼?當再次創建活動時,它會創建一個新的尋呼機適配器,幷包含所有新的4個片段。但是創建這些片段永遠不會被調用,所有成員都不會被初始化,所以reloadDataFromServer無法加載到尚未初始化的列表視圖中。然而,我們不再有對它們的引用,因爲我們用新的片段重新創建了FragmentPagerAdapter。但是我們不再引用它們,因爲我們用新的片段重新創建了FragmentPagerAdapter。這讓我瘋狂!爲什麼onCreate沒有調用新的片段?