我正在使用一个
tablayout
在一个fragment中,TabLayout有两个fragment:一个显示日历,另一个是简单的纯文本,我可以正确地在选项卡之间切换而不触发任何错误,问题是内容(内部fragment)没有显示,它们只是“不存在”!
我尝试查看其他在StackoverFlow上遇到相同问题的线程,但大多数人都遇到了NPE(空指针例外)错误的问题,这不是我的情况。
我尝试使用:
getChildFragmentManager()
和getFragmentManager()
代替getSupportFragmentManager()
请记住,我正在使用
嵌套片段
(片段中的片段)我正在使用AndroidHive的文档,我以前使用过它,但只是用简单的片段而不是嵌套的片段,它完美地工作
我尝试使用布局检查器工具。
问:我错过了什么,应该怎么做才能让它正常运行?!
以下是我的代码:
XML: MainFragment
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</android.support.v4.view.ViewPager>
</LinearLayout>
XML:日历片段
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:animateLayoutChanges="true"
android:id="@+id/main_content"
tools:context=".Tabs.CalendarTab">
<com.github.sundeepk.compactcalendarview.CompactCalendarView
android:visibility="visible"
android:id="@+id/compact_calendar"
android:layout_width="match_parent"
android:paddingRight="6dp"
android:paddingLeft="6dp"
android:layout_height="250dp"
app:compactCalendarTargetHeight="250dp"
app:compactCalendarTextSize="12sp"
app:compactCalendarBackgroundColor="@color/colorWhite"
app:compactCalendarTextColor="@color/colorDarkGrey"
app:compactCalendarCurrentDayBackgroundColor="@color/color13"
app:compactCalendarMultiEventIndicatorColor="@color/textColor2"
app:compactCalendarShouldSelectFirstDayOfMonthOnScroll="true"
app:compactCalendarCurrentDayIndicatorStyle="fill_large_indicator"/>
</RelativeLayout>
XML列表片段
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="250dp"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".Tabs.FullListTab">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="You Are In Tab 2"
android:id="@+id/textView"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
MainFragment JAVA
private TabLayout tabLayout;
private ViewPager viewPager;
//onCreate Method:
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) view.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
/*** end onCreate() ***/
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
adapter.addFragment(new CalendarTab(), "Calendar");
adapter.addFragment(new FullListTab(), "List");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(); adapter.AddFragment(new FragmentHistory(), ""); adapter.AddFragment(new FragmentBookmark(), ""); adapter.AddFragment(new FragmentSettings(), ""); mViewPager.setAdapter(adapter); mTabLayout.setupWithViewPager(mViewPager);
。 为什么您说永远不要这样做,有另一种实现方式吗? - TheCoderGuygetChildFragmentManager()
解决了。这听起来像是布局大小的问题。然而,它不是我所想象的那样,因此你可能需要考虑使用Layout Inspector
工具查看哪个视图的大小为0,0
而不是你实际期望的大小。 - EpicPandaForce