由于谷歌对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();
最后这几行代码,是官方原文,可以看一下。
|