更改方向后,如果我选择列表中的项目,我会重新创建我的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上的内存不足。
答案 0 :(得分:1)
我通过删除FragmentActivity超类的onSaveInstanceState调用来修复我的问题,如下所示:
protected void FragmentActivity(Bundle outState){ }
但我仍然不明白FragmentActivity的超类正在发生什么。这只是一个直观的猜测,成功了。我不明白它背后的理论。如果有人可以尝试解释一下,那就太好了。
答案 1 :(得分:0)
默认情况下,ViewPager
会缓存您的2个相邻片段。因此,onCreateView
不需要明确调用。