Android 使viewpager2响应选项卡单击事件

Android 使viewpager2响应选项卡单击事件,android,android-layout,android-viewpager,android-tablayout,android-viewpager2,Android,Android Layout,Android Viewpager,Android Tablayout,Android Viewpager2,目前,我已使用TabLayoutMediator将viewpager2设置为tablayout。tablayout与滑动手势完美配合,但我也希望选项卡能够响应直接单击事件。这是mycode: 创建活动时: viewPager = accessBinding.pager; pagerAdapter = new ScreenSlidePagerAdapter(this); viewPager.setAdapter(pagerAdapter);

目前,我已使用TabLayoutMediator将viewpager2设置为tablayout。tablayout与滑动手势完美配合,但我也希望选项卡能够响应直接单击事件。这是mycode:

创建活动时:

        viewPager = accessBinding.pager;
        pagerAdapter = new ScreenSlidePagerAdapter(this);
        viewPager.setAdapter(pagerAdapter);
        accessBinding.setLifecycleOwner(this);

        TabLayout tabLayout = accessBinding.accessTabs;
        TabLayout dotTabs = accessBinding.tabsDots;

        new TabLayoutMediator(tabLayout, viewPager,
                (tab, position) -> tab.setText(TAB_TITLES[position])
        ).attach();

        new TabLayoutMediator(dotTabs, viewPager,
                (tab, position) -> {}
        ).attach();
<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/accesslayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintVertical_weight="0">

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/topguideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.25" />

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/access_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/topguideline"
            app:tabGravity="fill" />

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabs_dots"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/pager"
            app:tabBackground="@drawable/tab_selector"
            app:tabPadding="0dp"
            app:tabGravity="center"
            app:tabIndicatorHeight="0dp"
            app:tabIndicatorFullWidth="false"/>

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="50dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@id/topguideline" />
</androidx.constraintlayout.widget.ConstraintLayout>
ScreenSlidePagerAdapter.java

private static class ScreenSlidePagerAdapter extends FragmentStateAdapter {
        // The number of tabs.
        private final int NUM_TABS = 2;
        public ScreenSlidePagerAdapter(FragmentActivity fa) {
            super(fa);
        }

        @Override
        public Fragment createFragment(int position) {
            Log.d("lifecycle","viewpager createFragment");
            if(position==0)
                return new LoginFragment();
            else
                return new RegisterFragment();
        }

        @Override
        public int getItemCount() {
            return NUM_TABS;
        }
    }
布局文件:

        viewPager = accessBinding.pager;
        pagerAdapter = new ScreenSlidePagerAdapter(this);
        viewPager.setAdapter(pagerAdapter);
        accessBinding.setLifecycleOwner(this);

        TabLayout tabLayout = accessBinding.accessTabs;
        TabLayout dotTabs = accessBinding.tabsDots;

        new TabLayoutMediator(tabLayout, viewPager,
                (tab, position) -> tab.setText(TAB_TITLES[position])
        ).attach();

        new TabLayoutMediator(dotTabs, viewPager,
                (tab, position) -> {}
        ).attach();
<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/accesslayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintVertical_weight="0">

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/topguideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.25" />

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/access_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/topguideline"
            app:tabGravity="fill" />

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabs_dots"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/pager"
            app:tabBackground="@drawable/tab_selector"
            app:tabPadding="0dp"
            app:tabGravity="center"
            app:tabIndicatorHeight="0dp"
            app:tabIndicatorFullWidth="false"/>

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="50dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@id/topguideline" />
</androidx.constraintlayout.widget.ConstraintLayout>

但它不起作用。请帮我解决这个问题。我认为tabselected的viewPager实现正在覆盖我的实现,但我需要弄清楚如何使viewPager响应单击事件,帮助我将父布局从ConstraintLayout更改为LinearLayout。以下是帮助我解决此问题的帖子:

虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考