为啥片段没有显示在tablayout中
Posted
技术标签:
【中文标题】为啥片段没有显示在tablayout中【英文标题】:why fragments are not displaying in tablayout为什么片段没有显示在tablayout中 【发布时间】:2021-06-23 23:13:38 【问题描述】:<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
tools:context=".HomeActivity"
android:orientation="horizontal"
android:fillViewport="true
<com.google.android.material.appbar.AppBarLayout
android:layout_
android:layout_>
<androidx.appcompat.widget.Toolbar
android:layout_
android:layout_
android:id="@+id/toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/MenuStyle">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_
android:layout_
android:id="@+id/profile_image" />
<TextView android:layout_
android:layout_
android:id="@+id/display_username"
android:layout_marginLeft="25dp"
android:textColor="#ffff"
android:textStyle="bold"
android:layout_marginStart="25dp"/>
</androidx.appcompat.widget.Toolbar>
<com.google.android.material.tabs.TabLayout
android:layout_
android:layout_
android:id="@+id/tab_layout"
android:background="#2F84C8"
app:tabSelectedTextColor="#fff"
app:tabIndicatorColor="#f66"
app:tabTextColor="#fff"/>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:fillViewport="true"
android:layout_
android:layout_
android:id="@+id/viewpager"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</RelativeLayout>
在xml代码中
TabLayout tabLayout=findViewById(R.id.tab_layout);
ViewPager viewPager=findViewById(R.id.viewpager);
ViewPagerAdapter viewPagerAdapter=new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragment(new ChatsFragment(),"Chats");
viewPagerAdapter.addFragment(new UserFragment(),"Users");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
class ViewPagerAdapter extends FragmentPagerAdapter
private ArrayList<Fragment>fragments;
private ArrayList<String> titles;
ViewPagerAdapter(FragmentManager fm)
super(fm);
this.fragments=new ArrayList<>();
this.titles=new ArrayList<>();
@NonNull
@Override
public Fragment getItem(int position)
return fragments.get(position);
@Override
public int getCount()
return fragments.size();
public void addFragment(Fragment fragment,String title)
fragments.add(fragment);
titles.add(title);
@Nullable
@Override
public CharSequence getPageTitle(int position)
return titles.get(position);
在 Java 代码中hare is a screenshot
它只显示选项卡和选项卡名称,但不显示选项卡。 它显示标题但不显示片段。 它在标签中显示标题,它们是聊天、用户,但不显示片段。我还有一个工具栏和一个操作栏。请帮帮我。
【问题讨论】:
向我们展示您的实现。如果您不就当前的方法提供见解,任何人都无法为您提供帮助。 请帮忙,我已经上传了代码 您的代码很好,似乎是布局问题。在这里分享整个布局。 现在我已经上传了完整的 xml 文件 【参考方案1】:可能性一:因为你使用RelativeLayout
没有一些layout_below
标签,内容可能在AppBar
下
可能性2:ViewPager
不需要android:fillViewport="true"
和app:layout_behavior="@string/appbar_scrolling_view_behavior"
可能性 3:从 RelativeLayout
中删除 android:orientation="horizontal"
。没有必要。试试改成ConstraintLayout
或者:提供片段初始化的代码。可能内容没有设置。
【讨论】:
我已经把你提到的所有要点都改了,但什么也没发生 @Somnath 那么请提供onCreateView
聊天或用户片段的方法和xml【参考方案2】:
class ViewPagerAdapter extends FragmentPagerAdapter private ArrayList<Fragment> fragments;
这是一种反模式,你不应该这样做。
TabLayout tabLayout=findViewById(R.id.tab_layout);
ViewPager viewPager=findViewById(R.id.viewpager);
ViewPagerAdapter viewPagerAdapter=new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
和
class ViewPagerAdapter extends FragmentPagerAdapter
ViewPagerAdapter(FragmentManager fm)
super(fm);
@NonNull
@Override
public Fragment getItem(int position)
if(position == 0) return new ChatsFragment();
if(position == 1) return new UserFragment();
throw new IllegalArgumentException("Unexpected position: " + position);
@Override
public int getCount()
return 2;
@Nullable
@Override
public CharSequence getPageTitle(int position)
if(position == 0) return "Chats";
if(position == 1) return "Users";
throw new IllegalArgumentException("Unexpected position: " + position);
如果此 TabLayout 位于 Fragment 中,那么您应该将 getChildFragmentManager()
传递给 ViewPagerAdapter。
【讨论】:
不,它在一个活动中,我应该遵循哪种模式 然后将你的根设为LinearLayout
和vertical
【参考方案3】:
感谢您在我使用时所有这些都已解决 安卓:layout_marginTop:"170dp" 在框架布局中 已经解决了。
【讨论】:
以上是关于为啥片段没有显示在tablayout中的主要内容,如果未能解决你的问题,请参考以下文章
带有 TabLayout 的片段内的 ScrollView 不滚动,为啥?
切换片段后,Android TabLayout 不再显示内容
getPageTitle() 没有被片段内的 Tablayout 调用
当我从 TabFragment 使用 LoaderManager 启动片段时,为啥 Tablayout 和 Viewpager 会因 NullpointerException 而崩溃?