【发布时间】:2019-04-10 21:54:23
【问题描述】:
我的 ViewPager 没有显示任何片段,即使它为我的“评论部分”加载了片段。我在“评分部分”中使用了相同的代码,它可以工作,甚至尝试重做 ViewPager 和适配器,但仍然没有进展。顺便说一句,我在片段中这样做。
我在适配器中添加了一个日志,以显示片段是否正常工作,并更改我的 Viewpager 的背景颜色以检查它是否可见。即使 ViewPager 可见,但片段仍然不显示。
更新:我发现问题是由我用来替换片段的活动引起的。
这里是代码 sn-p(在我的活动中同时包含“评分部分”和“评论部分”。
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;
}
【问题讨论】:
-
确保你在 Fragment 的 OnCreateView 方法中返回了 rootview。
-
我已经检查以确保每个 OnCreateView 方法都返回 rootView。仍然没有修复
-
像这样尝试
getChildFragmentManager():final SubPagerAdapter_ReviewAndInstructions adapter = new SubPagerAdapter_ReviewAndInstructions(getChildFragmentManager(), tabLayout.getTabCount()); -
使用 getChildFragmentManager() 时。得到这个错误 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on an null object reference
-
这是代码中其他地方的问题。使用 logcat 和引发异常的代码更新问题。
标签: java android android-fragments