ViewPager2滑动选项卡布局不显示片段名称

时间:2020-08-14 20:45:18

标签: android android-viewpager2

我正在尝试使用新的ViewPager2小部件在基于Java的android应用中实现制表布局。我的代码运行正常,但没有显示标签文本。日志告诉我,我的函数实际上为每个选项卡设置了正确的名称。

这是我想在其中显示标签布局的活动中的函数:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我终于发现自己失败了。请谨慎设置TabLayoutMediator的正确选项卡布局ID。