Android TabLayout+ViewPager2

198 篇文章 1 订阅

由于谷歌对Android Studio的不断更新,和对代码库、SDK等不断更新,导致以前的好多代码都不能正常运行了,今天就给大家说说TabLayout+ViewPager2。

TabLayout+ViewPager相信大家都会用,我前年写了段代码,大致写完了,一直没管,今天测试发现不能用。一点就崩,什么问题呢?我用的androidX库中的TabLayout+ViewPager2,然后我接收的时候用的ViewPager,类型转换异常,更正错误后发现,适配器中的代码都变红了。找了各种文档,发现说TabLayout+ViewPager和TabLayout+ViewPager2的使用方法是不一样的。而我写的代码是按照TabLayout+ViewPager写的,所以,一直报错,找了几篇文章,发现不是我想要的,于是我跋山涉水,终于解决了这个棘手的问题,下面直接进入正题。

首先,我的studio是2020年3月1日这版的。android库都更新成了androidx

有的文章说TabLayout+ViewPager2是需要导依赖的,那么我告诉你,不需要。

新版的studio和新版的SDK已经把TabLayout+ViewPager2的依赖添加到了androidx库里

implementation 'com.google.android.material:material:1.1.0'这个依赖就是。

你可以看看你的App依赖库里有没有这行代码,有就不需要管,或者你就不用管,只要在xml中能打出来TabLayout和ViewPager2,就表示studio已经给你添加了这个依赖。记住,ViewPager2是androidx库中的。好,下面直接上代码

本篇讲的是在Activity中添加TabLayout+ViewPager2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tl_tablayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/vp_give"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
tl_tablayout = (TabLayout) findViewById(R.id.tl_tablayout);
viewPager2 = (ViewPager2) findViewById(R.id.vp_give);
listTitle = new ArrayList<>();
listTitle.add("待取货");
listTitle.add("配送中");

listFragment = new ArrayList<>();
listFragment.add(new TakeFragment());
listFragment.add(new DeliveryFragment());
GiveAdapter adapter = new GiveAdapter(this, listTitle, listFragment);
viewPager2.setAdapter(adapter);
//把TabLayout(选项卡布局)和ViewPager2绑定在一起。特别说明一下,下面这行代码是官方给的,特别好使。
new TabLayoutMediator(tl_tablayout, viewPager2, (tab, position) -> tab.setText(listTitle.get(position))).attach();

适配器中的代码

public class GiveAdapter extends FragmentStateAdapter {
    private ArrayList<String> listTitle;
    private List<Fragment> listFragment;


    public GiveAdapter(@NonNull FragmentActivity fragmentActivity, ArrayList<String> listTitle, List<Fragment> listFragment) {
        super(fragmentActivity);
        this.listTitle = listTitle;
        this.listFragment = listFragment;
    }


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

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

}

好了,结束了,怎么样,是不是很简单,哈哈哈哈哈。相信有一定基础的同学都能看懂。

 TabLayout tabLayout = view.findViewById(R.id.tab_layout);
        new TabLayoutMediator(tabLayout, viewPager,
                (tab, position) -> tab.setText("OBJECT " + (position + 1))
        ).attach();

最后这几行代码,是官方原文,可以看一下。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值