![](/img/trans.png)
[英]How to update Fragments in Tablayout? (Viewpager2, FragmentStateAdapter)
[英]How to show fragments in ViewPager with tabLayout?
我正在嘗試使用 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();
}
注意:這兩個片段屬於同一類型,但我基於 Arguments 展示了不同的東西。(我使用 getInstance(..) 方法通過 Bundle 和 Arguments 來處理這個問題)。
對此代碼進行哪些更改可以解決問題?
position 從 0 開始。
@NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return getAllStoresFragment();
default:
return getPromotionsFragment();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.