我的 ViewPager 不显示任何 fragment ,即使它加载了我的“评论部分”的 fragment 。我在我的“评级部分”使用了相同的代码并且它有效,甚至尝试重做 ViewPager 和适配器但仍然没有进展。顺便说一句,我在一个 fragment 中这样做。
我在适配器中放置了一个日志以显示该 fragment 是否正常工作,并且还更改了我的 Viewpager 的背景颜色以检查它是否可见。即使 ViewPager 可见,但 fragment 仍未显示。
更新:我发现问题是由我用来替换 fragment 的 Activity 引起的。
这里是代码 fragment (在我的 Activity 中,它同时包含“评级部分”和“评论部分”。
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
评论.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;
}
最佳答案
感谢@Yupi 建议将 getActivity().getSupportFragmentManager()
更改为 getChildFragment()
,问题得以解决。问题发生期间,更改为getChildFragment()
时出现错误
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference
要修复此错误,我需要更改启动 fragment 事务的 Activity ,因此这是嵌套 fragment 问题的解决方案。
ViewItem.Java(之前)
FragmentManager manager;
manager = getSupportFragmentManager();
ViewItem.Java(之后)
FragmentTransaction manager;
manager = getSupportFragmentManager().beginTransaction();
SubPagerFragment_ReviewAndInstructions.java(之前)
final SubPagerAdapter_ReviewAndInstructions adapter = new SubPagerAdapter_ReviewAndInstructions(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
SubPagerFragment_ReviewAndInstructions.java(之后)
final SubPagerAdapter_ReviewAndInstructions adapter = new SubPagerAdapter_ReviewAndInstructions(getChildFragmentManager(), tabLayout.getTabCount());
结果
关于java - ViewPager 上没有显示 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738691/