【问题标题】:Managing fragment lifecycle in FragmentPagerAdapter在 FragmentPagerAdapter 中管理片段生命周期
【发布时间】:2016-09-30 08:38:50
【问题描述】:

我的应用程序主要活动中有一个片段寻呼机。 我还有一个操作栏按钮,它设置一些值,然后请求刷新其中一个片段(仪表板片段)(操作栏按钮仅在显示仪表板片段时可见) 它工作正常,除非系统回收内存(任务离开并打开其他几个应用程序并返回我的应用程序)

当我单击操作栏按钮并到达 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;
}
}

【问题讨论】:

    标签: android android-fragments fragmentpageradapter


    【解决方案1】:

    FragmentPagerAdapter - How to handle Orientation Changes?FragmentPagerAdapter - How to handle Orientation Changes?

    中,当方向改变时(我的应用仅是纵向),似乎发现了类似的问题

    @koso 建议的修复解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      相关资源
      最近更新 更多