如何使用 tabLayout 在 ViewPager 中显示片段?

Posted

技术标签:

【中文标题】如何使用 tabLayout 在 ViewPager 中显示片段?【英文标题】:How to show fragments in ViewPager with tabLayout? 【发布时间】:2020-12-11 08:10:01 【问题描述】:

我正在尝试使用 tabsLayout 在 vi​​ewPager 中显示片段,但 viewPager 什么也没显示。但是,选项卡已添加到视图中。 我还在片段中放置了一些日志,以确保它们已创建并显示日志 - 片段没有任何问题。

包含选项卡和 viewPager 的布局:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        android:orientation="vertical">
    
        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabLayout"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:layout_
            android:layout_
            android:layout_marginTop="20dp"
            app:tabIndicatorColor="@color/colorAccent"
            app:tabMode="fixed"
            app:tabSelectedTextColor="@color/colorAccent"
            app:tabTextAppearance="@style/customTabsStyle"
            app:tabTextColor="#000" />
    
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/viewPager"
            android:layout_
            android:layout_ />
    
    </LinearLayout>

然后在 MainActivity 我有这个代码:

    tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.promotions)));
    tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.all_stores)));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    final HomeTabsAdapter tabsAdapter = new 
    HomeTabsAdapter(MainActivity.this,getSupportFragmentManager(),
            tabLayout.getTabCount());
    viewPager.setAdapter(tabsAdapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() 
    @Override
    public void onTabSelected(TabLayout.Tab tab) 
        viewPager.setCurrentItem(tab.getPosition());
    

    @Override
    public void onTabUnselected(TabLayout.Tab tab) 
    

    @Override
    public void onTabReselected(TabLayout.Tab tab) 
    
);

这是 HomeTabsAdapter 的一部分:

public HomeTabsAdapter(Context c, FragmentManager fm, int totalTabs) 
super(fm);
context = c;
this.totalTabs = totalTabs;

@NonNull
@Override
public Fragment getItem(int position) 
    switch (position) 
        case 1:
            return getAllStoresFragment();
        default:
            return getPromotionsFragment();
    

注意:两个片段属于同一类型,但我根据参数显示不同的内容。 (我正在使用 getInstance(..) 方法来使用 Bundle 和 Arguments 来处理这个问题)。

对此代码进行哪些更改可以解决问题?

【问题讨论】:

【参考方案1】:

位置从 0 开始。

@NonNull
@Override
public Fragment getItem(int position) 
    switch (position) 
        case 0:
            return getAllStoresFragment();
        default:
            return getPromotionsFragment();
    

【讨论】:

以上是关于如何使用 tabLayout 在 ViewPager 中显示片段?的主要内容,如果未能解决你的问题,请参考以下文章

安卓中实现界面数据懒加载

cathome 猫家 开发日记-tablayout+viewpager+fragment

TabLayout+ViewPager制作简单导航栏

android 中怎么关掉viewpage的滑动效果

ViewPager2学习总结

如何在 android 中设置 ViewPage 及其适配器?