Android ViewPager使用

测试,摘要是只显示段落里的?不能显示markdown里的吗?

TabLayoutMediator tabLayoutMediator;//配置策略

tabLayoutMediator = new TabLayoutMediator(binding.articleTab, binding.articlePager2, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                if (position == 0) {
                    tab.setText("您的订阅"); //tablayout要显示的内容
                } else {
                    tab.setText("所有文章");
                }
            }
        });
tabLayoutMediator.attach();

viewpager一般搭配tablayout使用。使用方法如下: 阿萨HD

1、在xml布局中添加tablayout和viewpager2组件

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".fragment.ArticleListFragment">

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/articleTab"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <com.google.android.material.tabs.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="M"/>

            <com.google.android.material.tabs.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="T"/>

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

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/articlePager2"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/articleTab" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

2、配置tabLayout

TabLayoutMediator tabLayoutMediator;//配置策略

tabLayoutMediator = new TabLayoutMediator(binding.articleTab, binding.articlePager2, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                if (position == 0) {
                    tab.setText("您的订阅"); //tablayout要显示的内容
                } else {
                    tab.setText("所有文章");
                }
            }
        });
tabLayoutMediator.attach();

3、配置viewpager2

        binding.articlePager2.setAdapter(new FragmentStateAdapter(this) {
            @NonNull
            @Override
            public Fragment createFragment(int position) {//每一个页面对应要创建的对应的页面
                if (position == 0) {
                    return new ArticleSubscFragment();
                }
                return new AllArticleFragment();
            }

            @Override
            public int getItemCount() {//需要实现几个页面
                return 2;
            }
        });

4、其他功能

4.1 设置为不可滚动(一般是viewpager2里的fragment有滚动,与viewpager2冲突)
binding.viewPager2.setUserInputEnabled(false);
4.2 设置默认显示界面
   //设置当前默认页面为PlanNow(必须放在setAdapter后面才有效)
//如下直接设置是没有效果的
//要独立提供滚动设备,您应该使用onGlobalLayoutListener。因此,您可以保证在调用viewPager.setCurrentItem(position)时呈现视图。否则setCurrentItem不会产生任何影响,因为视图还没有渲染。
//参考https://www.thinbug.com/q/32401998
//        binding.viewPager2.setCurrentItem(1);
//下标从0开始
        binding.viewPager2.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
        {
            @Override
            public void onGlobalLayout()
            {
                binding.viewPager2.setCurrentItem(1, false);
            }
        });

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注