我的ViewPager没有显示任何片段,即使它为我的" Review部分"加载片段。我在"评级部分"中使用了相同的代码。它工作,甚至尝试重做ViewPager和适配器,但仍然没有进展。顺便说一下,我是在一个片段中这样做的。
我在适配器中放入一个日志,以显示该片段是否正常工作,并更改我的Viewpager的背景颜色以检查它是否可见。即使ViewPager可见但片段仍未显示。
更新:我发现由我用来替换片段的活动引起的问题。
这里是代码片段(在我的活动中同时包含"评级部分"以及"审核部分"。
SubSectionFragment_Rating subSectionFragment_rating = new SubSectionFragment_Rating();
manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.ratingSection,subSectionFragment_rating, subSectionFragment_rating.getTag()).commit();
SubSectionFragment_ReviewAndInstructions subSectionFragment = new SubSectionFragment_ReviewAndInstructions();
manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.subTab,subSectionFragment, subSectionFragment.getTag()).commit();
Should display this fragment in ViewPager
Review.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hybridelements.openchef.fragment_activities.fragment_subs.SubSectionFragment_ReviewAndInstructions">
<RelativeLayout
android:id="@+id/main_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="6dp"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tab_layout"
android:background="@android:color/holo_green_dark"/>
</RelativeLayout>
Review.java(代码的一部分)
viewPager = (ViewPager) rootView.findViewById(R.id.pager);
final SubPagerAdapter_ReviewAndInstructions adapter = new SubPagerAdapter_ReviewAndInstructions(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
SubPagerAdapter_ReviewAndInstructions.java
public SubPagerAdapter_ReviewAndInstructions(FragmentManager fm, int NumOfTabs){
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
ReviewsFragment subTab1 = new ReviewsFragment();
Log.d("ReviewAndInstruction","ReviewsFragment loaded");
return subTab1;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
答案 0 :(得分:2)
由于@Yupi建议从getActivity().getSupportFragmentManager()
更改为getChildFragment()
,问题已解决。在问题发生期间,当更改为getChildFragment()
时出现错误
java.lang.NullPointerException:尝试调用虚方法&#39; java.lang.Object android.util.SparseArray.get(int)&#39;在空对象引用上
要修复此错误,我需要更改启动片段事务的活动,因此这里是嵌套片段问题的解决方案。
ViewItem.Java( BEFORE )
FragmentManager manager;
manager = getSupportFragmentManager();
ViewItem.Java( AFTER )
FragmentTransaction manager;
manager = getSupportFragmentManager().beginTransaction();
SubPagerFragment_ReviewAndInstructions.java( BEFORE )
final SubPagerAdapter_ReviewAndInstructions adapter = new SubPagerAdapter_ReviewAndInstructions(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
SubPagerFragment_ReviewAndInstructions.java( AFTER )
final SubPagerAdapter_ReviewAndInstructions adapter = new SubPagerAdapter_ReviewAndInstructions(getChildFragmentManager(), tabLayout.getTabCount());
<强>结果强>
答案 1 :(得分:0)
就我而言,childFragmentManager
和addToBackStack
仍然无法解决我的问题,this解决方案可能会起作用。通过@ burning-violet解决方案的组合。
childFragmentManager
用于构造ViewPager FragmentStatePageAdapter
override restoreState()
addToBackStack(null)
//此可选项 restoreState()
尝试捕获只会使错误(NPE)保持沉默,必须对其进行相应的修复。