如何使用 tabLayout 在 ViewPager 中显示片段?
Posted
技术标签:
【中文标题】如何使用 tabLayout 在 ViewPager 中显示片段?【英文标题】:How to show fragments in ViewPager with tabLayout? 【发布时间】:2020-12-11 08:10:01 【问题描述】:我正在尝试使用 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_
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 中显示片段?的主要内容,如果未能解决你的问题,请参考以下文章