ViewPager+FlycoTabLayout联动

FlycoTabLayou依赖

implementation ‘com.flyco.tablayout:FlycoTabLayout_Lib:2.0.2@aar’

布局

		   <androidx.viewpager.widget.ViewPager
                android:layout_below="@id/toolbar"
                android:layout_above="@id/tablayout"
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
            <com.flyco.tablayout.CommonTabLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:id="@+id/tablayout"/>

MainActivity

public class MainActivity extends AppCompatActivity {

    DrawerLayout drawerLayout;
    ViewPager viewPager;
//    TabLayout tableLayout;
    CommonTabLayout commonTabLayout;

    
    List<String> titles=new ArrayList<>();//存标题
    List<Fragment> fragments=new ArrayList<>();// 存fragement
    ArrayList<CustomTabEntity> customTabEntities=new ArrayList<>();//存tablayout数据

    Fragment fragment1,fragment2,fragment3,fragment4;
    MyAdapter adapter;

    String[] strings=new String[]{
            "android.permission.CALL_PHONE",
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE",
            "android.permission.CAMERA"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		
		//动态授权
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            requestPermissions(strings,110);
        }

        init();
        //tablayout数据
        addTablayout();
        //联动
        setChange();
        //点击按钮切换view pager
        buttonClick();

    }

    private void buttonClick() {
        findViewById(R.id.one).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
           	 //跳转到viewpager指定下标界面
                viewPager.setCurrentItem(0);
                drawerLayout.closeDrawer(Gravity.LEFT);
            }
        });
        findViewById(R.id.two).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewPager.setCurrentItem(1);
                drawerLayout.closeDrawer(Gravity.LEFT);
            }
        });
        findViewById(R.id.three).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewPager.setCurrentItem(2);
                drawerLayout.closeDrawer(Gravity.LEFT);

            }
        });
        findViewById(R.id.four).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewPager.setCurrentItem(3);
                drawerLayout.closeDrawer(Gravity.LEFT);
            }
        });
    }

    private void setChange() {
        adapter=new MyAdapter(getSupportFragmentManager(),fragments,titles,this);
        viewPager.setAdapter(adapter);

        commonTabLayout.setTabData(customTabEntities);

        //点击tablayout 切换viewpager
        commonTabLayout.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelect(int position) {
                viewPager.setCurrentItem(position);
            }

            @Override
            public void onTabReselect(int position) {

            }
        });

        //viewpager切换时,commontablayout跟着切换
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                commonTabLayout.setCurrentTab(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    private void addTablayout() {
        titles.add("aaa");
        titles.add("bbb");

        fragments.add(fragment1);
        fragments.add(fragment2);
        fragments.add(fragment3);
        fragments.add(fragment4);

        customTabEntities.add(new MyCustom("第一个",R.mipmap.a,R.mipmap.b));
        customTabEntities.add(new MyCustom("第二个",R.mipmap.a,R.mipmap.b));
        customTabEntities.add(new MyCustom("第三个",R.mipmap.a,R.mipmap.b));
        customTabEntities.add(new MyCustom("第四个",R.mipmap.a,R.mipmap.b));

        commonTabLayout.setTabData(customTabEntities);

    }

    private void init() {
        drawerLayout=findViewById(R.id.drawerLayout);
        viewPager=findViewById(R.id.viewpager);
//        tableLayout=findViewById(R.id.tablayout);
        commonTabLayout=findViewById(R.id.tablayout);
        fragment1=new MyFragment1();
        fragment2=new MyFragment2();
        fragment3=new MyFragment3();
        fragment4=new MyFragment4();
    }

ViewPager适配器

public class MyAdapter extends FragmentPagerAdapter {
    
   List<Fragment> fragments;
   List<String> titles;
   Context context;

    public MyAdapter(@NonNull FragmentManager fm, List<Fragment> fragments, List<String> titles, Context context) {
        super(fm);
        this.fragments = fragments;
        this.titles = titles;
        this.context = context;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ViewPager 和 Fragment 是 Android 开发中常用的组件,ViewPager 可以实现左右滑动切换不同的页面,而 Fragment 可以实现模块化开发,将界面和逻辑分离,便于维护和扩展。 将两者结合起来可以实现多个 Fragment 在 ViewPager 中的左右滑动切换。具体实现步骤如下: 1. 创建多个 Fragment,每个 Fragment 对应一个页面。 2. 创建一个继承自 FragmentPagerAdapter 或 FragmentStatePagerAdapter 的适配器类,重写 getItem() 方法,返回对应位置的 Fragment。 3. 在布局文件中添加 ViewPager 组件,并设置适配器。 4. (可选)设置 ViewPager 的页面切换动画效果。 示例代码: 1. 创建 Fragment: ``` public class MyFragment extends Fragment { // ... } ``` 2. 创建适配器: ``` public class MyPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; public MyPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) { super(fm); this.fragmentList = fragmentList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } } ``` 3. 在布局文件中添加 ViewPager 组件: ``` <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 4. 设置适配器: ``` List<Fragment> fragmentList = new ArrayList<>(); fragmentList.add(new MyFragment()); fragmentList.add(new MyFragment()); fragmentList.add(new MyFragment()); ViewPager viewPager = findViewById(R.id.view_pager); viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(), fragmentList)); ``` 5. (可选)设置页面切换动画效果: ``` viewPager.setPageTransformer(true, new DepthPageTransformer()); ``` 以上是 ViewPager 和 Fragment 的基本用法,你还可以根据实际需求对它们进行更多的扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值