我正在尝试使用 FragmentStatePagerAdapter(因为动态添加片段)将 Fragment(父片段)与 View-Pager 一起使用,并在视图寻呼机的不同页面中从 youtube 获取视频。当在查看寻呼机片段(嵌套片段)中单击 youtube 视频时,父片段将被另一个播放相应 youtube 视频的片段替换。
我能够在 2 个片段(包含视图寻呼机的片段和包含 youtube 播放器的片段)之间来回移动。但是经过一些来回移动后,我的应用程序由于stackoverflow 错误而崩溃
在搜索各种博客并在堆栈溢出中发布后,我发现我的嵌套片段没有从后堆栈中弹出。我已经尝试过这样的解决方案 -
public void onBackPressed() {
if (!fragment.getChildFragmentManager().popBackStackImmediate()) {
finish();
}
}
}
其中 fragment 是包含 view-pager 但应用程序仍然崩溃的片段。
以下是我的崩溃报告和相关代码
崩溃报告-
07-05 16:49:24.033: E/ACRA(32192): org.pckg.name 致命错误: null 07-05 16:49:24.033: E/ACRA(32192): java.lang.StackOverflowError 07-05 16 :49:24.033: E/ACRA(32192): 在 android.text.TextLine.handleText(TextLine.java:747) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.TextLine。 handleRun(TextLine.java:898) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.TextLine.measureRun(TextLine.java:414) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.text.TextLine.measure(TextLine.java:293) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.TextLine.metrics(TextLine.java:267 ) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.Layout.getLineExtent(Layout.java:977) 07-05 16:49:24.033: E/ACRA(32192): 在 android .text.Layout.drawText(Layout.java:329) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.Layout.draw(Layout.java:205) 07-05 16:49 :24.033:E/ACRA(32192): 在 android.text.BoringLayout.draw(BoringLayout.java:400) 07-05 16:49:24.033: E/ACRA(32192): 在 android.widget.TextView.onDraw(TextView.java :5030) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13712) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup。 drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16: 49:24.033: E/ACRA(32192): 在 android.widget.AbsListView.dispatchDraw(AbsListView.java:2327) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw (View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): 在 android.widget.AbsListView.draw(AbsListView.java:3653) 07-05 16:49:24.033: E/ACRA (32192): 在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.看法。ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java :12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): 在 android.support.v4。 view.ViewPager.draw(ViewPager.java:2153) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw (View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA (32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android. view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49: 24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View。getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928 ) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android .view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49 :24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild( ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033:E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java :12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): 在 android.widget.FrameLayout。 draw(FrameLayout.java:467) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16: 49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw (View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA (32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648)在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View。 draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648 )在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View。 draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648 )E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java :2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.View.getDisplayList(View.java:12648)E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java :2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.View.getDisplayList(View.java:12648)
代码- 父片段 onCreate() 方法 -
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "video detail frag onCreate");
Log.d(TAG, "bundle of onCreate = " + savedInstanceState);
if(savedInstanceState == null){
gPageList = getFragments();
ArrayList<String> pageTitle = generatePageTitle();
gDetailPagerAdapter = new CustomPagerAdapter(getChildFragmentManager(), gPageList, pageTitle);
}else{
isCategoryTabAdded = savedInstanceState.getBoolean("isCategoryTabAdded");
isSearchTabAdded = savedInstanceState.getBoolean("isSearchTabAdded");
}
}
viewpager 片段 onItemClick() 代码-
public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg3) {
if (gVideoList != null) {
FragmentManager fragManager = getParentFragment().getChildFragmentManager();
FragmentTransaction fragTrans = fragManager.beginTransaction();
Fragment uTubeVideoFrag = FragmentYouTubeVideoPlayer.newInstance(
position, gVideoList.get(position).gVideoId);
fragTrans.replace(R.id.content_frame, uTubeVideoFrag);
fragTrans.addToBackStack(null);
fragTrans.commit();
}
}