首页 > 解决方案 > ViewPager2 滑动选项卡布局不显示片段名称

问题描述

我正在尝试使用新的 ViewPager2 小部件在基于 java 的 android 应用程序中实现 tablayout。我的代码运行良好,但不显示选项卡文本。日志告诉我,我的函数实际上为每个选项卡设置了正确的名称。

这是我的活动中的函数,我希望在其中显示选项卡布局:

private void setUpViewPagerNew(){

            String[] fragment_names = {"Gallery", "Photo"};

            mViewPager2 = (ViewPager2) findViewById(R.id.container2);
            TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_viewpager2);
            SectionsPagerAdapterNew sectionsPagerAdapterNew = new SectionsPagerAdapterNew(this);
            sectionsPagerAdapterNew.addFragment(new GalleryFragment());
            sectionsPagerAdapterNew.addFragment(new PhotoFragment());

            mViewPager2.setAdapter(sectionsPagerAdapterNew);


            TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(
                    tabLayout, mViewPager2, (tab, position) -> {
                        tab.setText(fragment_names[position]);

                Log.d(TAG, "setUpViewPagerNew: TAB: " + tab);
                Log.d(TAG, "setUpViewPagerNew: POSITION: " + position);
                Log.d(TAG, "setUpViewPagerNew: GET TEXT: " + tab.getText());
                
            });
            tabLayoutMediator.attach();
        } 

这是我的 FragmentStateAdapter 助手类:

public class SectionsPagerAdapterNew extends FragmentStateAdapter {

    private static final String TAG = "SectionsPagerAdapter";

    private final List<Fragment> mFragmentList = new ArrayList<>();

    public SectionsPagerAdapterNew(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    public SectionsPagerAdapterNew(@NonNull Fragment fragment) {
        super(fragment);
    }

    public SectionsPagerAdapterNew(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }


    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getItemCount() {
        return mFragmentList.size();
    }


    public void addFragment(Fragment fragment){
        mFragmentList.add(fragment);
    }
}

这是我的 ViewPager 布局文件:

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.tabs.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tab_layout_viewpager2"
            android:background="@color/red"
            app:tabSelectedTextColor="@color/light_blue">

        </com.google.android.material.tabs.TabLayout>

       <androidx.viewpager2.widget.ViewPager2
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:id="@+id/container2">
       </androidx.viewpager2.widget.ViewPager2>




    </RelativeLayout>

</merge>

最后但并非最不重要的是日志输出:

setUpViewPagerNew: TAB: com.google.android.material.tabs.TabLayout$Tab@37a259f
setUpViewPagerNew: POSITION: 0
setUpViewPagerNew: GET TEXT: Gallery
setUpViewPagerNew: TAB: com.google.android.material.tabs.TabLayout$Tab@a72a6ec
setUpViewPagerNew: POSITION: 1
setUpViewPagerNew: GET TEXT: Photo

谢谢你的帮助!

标签: androidandroid-viewpager2

解决方案


我终于发现了我的失败。请注意为 TabLayoutMediator 设置正确的选项卡布局 ID。


推荐阅读