当从另一个片段返回时VIewPager显示错误
问题描述:
这里是结构:我想只使用一个Activity和几个片段来构建我的应用程序。在MainActivity中有一个FrameLayout作为容器。一开始,Fragment_Base将被添加到容器中,其中有一个TabLayout和一个ViewPager,包含三个选项卡:Tab1,Tab2 & Tab3,所有片段。当从另一个片段返回时VIewPager显示错误
然后在Tab1中有一个按钮。点击它时,Framelayout(容器)将被Fragment_Search替换。它确实有效,并且显示了一个新的Fragment_Search。但是当我点击手机上的返回按钮并返回到前一个片段时,出现了问题。
这里的变化:
返回Fragment_Base,并得到错误。你可以看到,Tab1中的所有小部件都消失了,但是在滑动到Tab2-> Tab3-> Tab2-> Tab1之后它们再次出现。 Tab2的背景是橙色的,它只是消失。更奇怪的是TabLayout中tab2的指示条位置错误,如果我滑动到tab3-> tab2,这也会变得正常。
下面是一些代码:
-
在MainActivity.java,OnCreate中():
if (findViewById(R.id.framelayout_base) != null) { if (savedInstanceState != null) { return ; } Frag_Base frag_base = new Frag_Base(); getSupportFragmentManager().beginTransaction() .add(R.id.framelayout_base, frag_base) .commit(); }
-
在Fragment_Base.java,OnCreateView():
View view = inflater.inflate(R.layout.fragment_base, container, false); fragmentActivity = getActivity(); // initial views mViewPager = view.findViewById(R.id.viewPager_); mFragmentPagerAdapter = new MainFragmentPagerAdapter(fragmentActivity.getSupportFragmentManager()); mViewPager.setAdapter(mFragmentPagerAdapter); mTabLayout = view.findViewById(R.id.tabLayout_); mTabLayout.setupWithViewPager(mViewPager); mTabLayout.getTabAt(0).setIcon(R.drawable.ic_search); mTabLayout.getTabAt(1).setIcon(R.drawable.ic_star); mTabLayout.getTabAt(2).setIcon(R.drawable.ic_profile);
-
在MainFragmentPagerAdapter.java中,getItem(int position):
switch (position) { case 0: return new Fragment1(); case 1: return new Fragment2(); case 2: return new Fragment3(); default: return null; }
-
在Fragment1.java,的OnClick(查看视图):
case R.id.fab_gotoSearch: Log.d(TAG, "onClick: "+"go to search"); Frag_Search frag_search = new Frag_Search(); getFragmentManager().beginTransaction() .replace(R.id.framelayout_base, frag_search) .addToBackStack(null) .commit(); break;
编辑 所有的日志都是白色的,其实,但这里是所有片段的日志:
10-21 09:34:25.923 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onAttach:
10-21 09:34:25.923 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onCreate:
10-21 09:34:25.925 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onCreateView:
10-21 09:34:25.974 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onStart:
10-21 09:34:25.976 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onResume:
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment1: onAttach:
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment1: onCreate:
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment2: onAttach:
10-21 09:34:26.015 5537-5537/com.project.nanfang.music_n D/Fragment2: onCreate:
10-21 09:34:26.016 5537-5537/com.project.nanfang.music_n D/Fragment1: onCreateView:
10-21 09:34:26.090 5537-5537/com.project.nanfang.music_n D/Fragment1: onStart:
10-21 09:34:26.090 5537-5537/com.project.nanfang.music_n D/Fragment1: onResume:
10-21 09:34:26.090 5537-5537/com.project.nanfang.music_n D/Fragment2: onCreateView:
10-21 09:34:26.093 5537-5537/com.project.nanfang.music_n D/Fragment2: onStart:
10-21 09:34:26.093 5537-5537/com.project.nanfang.music_n D/Fragment2: onResume:
10-21 09:34:41.028 5537-5537/com.project.nanfang.music_n D/Fragment3: onAttach:
10-21 09:34:41.028 5537-5537/com.project.nanfang.music_n D/Fragment3: onCreate:
10-21 09:34:41.028 5537-5537/com.project.nanfang.music_n D/Fragment3: onCreateView:
10-21 09:34:41.030 5537-5537/com.project.nanfang.music_n D/Fragment3: onStart:
10-21 09:34:41.030 5537-5537/com.project.nanfang.music_n D/Fragment3: onResume:
10-21 09:34:46.933 5537-5537/com.project.nanfang.music_n D/Fragment1: onPause:
10-21 09:34:46.933 5537-5537/com.project.nanfang.music_n D/Fragment1: onStop:
10-21 09:34:51.374 5537-5537/com.project.nanfang.music_n D/Fragment1: onCreateView:
10-21 09:34:51.410 5537-5537/com.project.nanfang.music_n D/Fragment1: onStart:
10-21 09:34:51.411 5537-5537/com.project.nanfang.music_n D/Fragment1: onResume:
10-21 09:35:01.860 5537-5537/com.project.nanfang.music_n D/Fragment3: onPause:
10-21 09:35:01.860 5537-5537/com.project.nanfang.music_n D/Fragment3: onStop:
10-21 09:35:08.150 5537-5537/com.project.nanfang.music_n D/Fragment1: onClick: go to search
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Frag_Search: onAttach:
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Frag_Search: onCreate:
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onPause:
10-21 09:35:08.152 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onStop:
10-21 09:35:08.159 5537-5537/com.project.nanfang.music_n D/Frag_Search: onCreateView:
10-21 09:35:08.243 5537-5537/com.project.nanfang.music_n D/Frag_Search: onStart:
10-21 09:35:08.243 5537-5537/com.project.nanfang.music_n D/Frag_Search: onResume:
10-21 09:35:13.843 5537-5537/com.project.nanfang.music_n D/Frag_Search: onPause:
10-21 09:35:13.843 5537-5537/com.project.nanfang.music_n D/Frag_Search: onStop:
10-21 09:35:13.854 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onCreateView:
10-21 09:35:13.874 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onStart:
10-21 09:35:13.874 5537-5537/com.project.nanfang.music_n D/Fragment_Base: onResume:
似乎在回到Fragment_Base后,Fragment1不会调用OnCreate()。这是问题吗?
答
那么...我清理并重建项目,然后一切顺利...
发布您的错误日志 –