配置更改后未在viewpager中调用Fragment.onCreateView()

时间:2014-03-08 22:23:52

标签: android android-fragments android-viewpager

更改方向后,如果我选择列表中的项目,我会重新创建我的listpager活动(列表/详细信息类型),然后崩溃。

我不想打扰你所有细节(因为onCreateView()中引用的textview为null,所以存在nullpointerexception。 我的问题是:ViewPager如何在每个页面中显示一个片段而不调用它们的onCreateView()?

在转动设备之前应用程序启动后如何正常工作?

我只有2页/片段。但我看到调试器在重新创建此活动时会创建4个片段。你知道为什么以及在哪里记录这些内容吗?

任何解决方案?在此先感谢您的帮助。我迷失在这里因为我自己不控制碎片,viewpager会这样做。

==========

更新:请在下面找到其他要求的信息

public class  DetailFragment extends Fragment {
    TextView mDetailTV;
    // Retrieve the data to display from the parent activity
    private String getData() {
        ViewPagerActivity activity = (ViewPagerActivity)getActivity();
        return( activity.detailArray[activity.mPosition] );
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_detail_fragment, container, false);
        mDetailTV = (TextView)view.findViewById(R.id.detailTV);
        displayDetail(getData());   
        return view;
    }
    // Display data
    void displayDetail(String data) {       
        mDetailTV.setText(data);
    }

并实例化列表和详细信息片段,并将其传递给Pager Adapter:

mListFragment = new ListFragmentt();
mDetailFragment = new DetailFragment();
mPagerAdapter = new MFragmentPagerAdapter(getSupportFragmentManager(), mListFragment, mDetailFragment);

此外,列表/细节中的数据来自经典的Skakespeare示例,因此我怀疑三星S4上的内存不足。

2 个答案:

答案 0 :(得分:1)

我通过删除FragmentActivity超类的onSaveInstanceState调用来修复我的问题,如下所示:

protected void FragmentActivity(Bundle outState){ }

但我仍然不明白FragmentActivity的超类正在发生什么。这只是一个直观的猜测,成功了。我不明白它背后的理论。如果有人可以尝试解释一下,那就太好了。

答案 1 :(得分:0)

默认情况下,ViewPager会缓存您的2个相邻片段。因此,onCreateView不需要明确调用。