我的适配器变为空

时间:2016-05-30 12:19:02

标签: android android-fragments android-viewpager

我在一项活动中有一个viewpager。我像这样加载它

ArrayList<Fragment> arrayListFragment = new ArrayList<>();
Fragment first = Fragment.instantiate(MainActivity.this, MainActivityFragment.class.getName());
Fragment second = Fragment.instantiate(MainActivity.this, SecondFragment.class.getName());
arrayListFragment.add(first);
arrayListFragment.add(second);
Log.d(TAG, "Pager created " + second);
mPagerAdapter = new SwipeScreenPagerAdapter(getSupportFragmentManager(),
                    arrayListFragment, pageTitles); //This is custom adapter

在SecondFragment的onCreateView()中我记录了这个日志:

mAdapter = new CustomAdapter(mContext, null, mList);
Log.d(TAG, "Initialised adapter " + this);

运行应用程序时,一切正常。有趣的事情发生在我将应用程序放在后台,然后在一段时间后恢复它。重新启动活动并再次初始化viewpager,由于某种原因,Log.d(TAG, "Pager created " + second);Log.d(TAG, "Initialised adapter " + this);语句打印具有不同ID的片段。它们在第一次运行时都打印相同的ID,但在我恢复时会有所不同。当在片段函数中使用时,mAdapter变为null(因为在从viewpager接收的片段上调用此函数)。

日志语句是:

Pager created SecondFragment{269ef202}
Initialised adapter SecondFragment{298444fe #2 id=0x7f0e0084 android:switcher:2131624068:1}

从哪里创建这个新片段?起初我以为它以某种方式恢复旧片段,但我尝试在onActivityCreate中传递null,如下所示:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(null);
}

但它仍在创建单独的片段实例,并且它具有不同的ID。

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。当应用程序恢复时,活动正在恢复在调用中最后与其关联的片段

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}

因此将null传递给super.onCreate(null)会导致它无法恢复最后一个片段。在我的情况下,我需要创建片段的新副本,因为每次创建活动时都需要重新获取我的数据set it null with caution