0
我的應用程序主要活動中有一個片段尋呼機。 我也有一個操作欄按鈕,設置一些值,然後請求刷新其中一個片段(儀表板片段)(操作欄按鈕僅在儀表板片段顯示時纔可見) 它工作正常,當系統回收內存(任務離開並打開幾個其他應用程序,並返回到我的應用程序)在FragmentPagerAdapter中管理片段生命週期
當我點擊操作欄按鈕,並達到refreshDashboard()我得到一個NPE作爲儀表板片段爲空。
事實上,getItem()只在最初創建主機活動時才被調用,而當第二次創建活動時纔會被調用。
我試圖創建片段的重寫的instanciateItem(),但只是創建空白片段。
使適配器實現Parcelable可能很乏味。
當系統有回收內存時,是否有保存方式來重新創建碎片(沒有任何泄漏)?
我的活動:
public class HomeActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
enableActionBarOverflow();
mPager = (ViewPager) findViewById(R.id.home_view_pager);
mTabStrip = (PagerTabStrip) findViewById(R.id.home_pager_header);
mPagerAdapter = HomePagerAdapter.newInstance(getSupportFragmentManager(), this);
mPager.setAdapter(mPagerAdapter);
}
}
和我的適配器:
public class HomePagerAdapter extends FragmentPagerAdapter {
public HomePagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
private DashboardFragment dashboardFragment;
private ListFragment listFragment;
private static Context mContext;
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
dashboardFragment = DashboardFragment.newInstance();
return dashboardFragment;
case 1:
listFragment = ListFragment.newInstance();
return listFragment;
}
return null;
}
public void refreshDashboard(){
dashboardFragment.refresh();
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return mContext.getResources().getString(R.string.tab_dashboard);
case 1:
return mContext.getResources().getString(R.string.tab_list);
}
return "";
}
public static HomePagerAdapter newInstance(FragmentManager supportFragmentManager, Context context) {
HomePagerAdapter homePagerAdapter = new HomePagerAdapter(supportFragmentManager);
mContext = context.getApplicationContext();
return homePagerAdapter;
}
}