为啥片段没有显示在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。

【讨论】:

不,它在一个活动中,我应该遵循哪种模式 然后将你的根设为LinearLayoutvertical【参考方案3】:

感谢您在我使用时所有这些都已解决 安卓:layout_marginTop:"170dp" 在框架布局中 已经解决了。

【讨论】:

以上是关于为啥片段没有显示在tablayout中的主要内容,如果未能解决你的问题,请参考以下文章

Tablayout+view 寻呼机未在位置 0 显示片段

带有 TabLayout 的片段内的 ScrollView 不滚动,为啥?

切换片段后,Android TabLayout 不再显示内容

getPageTitle() 没有被片段内的 Tablayout 调用

当我从 TabFragment 使用 LoaderManager 启动片段时,为啥 Tablayout 和 Viewpager 会因 NullpointerException 而崩溃?

在tablayout viewpager中运行调整选项卡片段