2016-09-30 30 views
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; 
} 
} 

回答