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

问题描述

我正在尝试使用tabsLayout在viewPager中显示片段,但是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_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabLayout"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            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_width="match_parent"
            android:layout_height="match_parent" />
    
    </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处理此问题。)

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

解决方法

位置从0开始。

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