这是我参与「第四届青训营 」笔记创作活动的第4天。
效果图
TabLayout一般是结合ViewPager+Fragment的使用实现滑动的标签选择器。
代码实现
1. 在布局文件中添加ViewPager控件和TabLayout控件
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2. 为ViewPager控件编写适配器类(继承androidx包下的FragmentPagerAdapter类)
public class MyFragAdapter extends FragmentPagerAdapter {
将传入的tab标签标题数组和装有fragment的链表定义为全局变量
String titleArr[];
List<Fragment> mFragmentList;
通过构造方法传入相关参数
public MyFragAdapter(FragmentManager fm, List<Fragment> list, String[] titleArr) {
super(fm);
this.mFragmentList = list;
this.titleArr = titleArr;
}
重写相关方法
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList != null ? mFragmentList.size() : 0;
}
@Override
public CharSequence getPageTitle(int position) {
return titleArr[position];
}
@Override
public void destroyItem( ViewGroup container, int position, Object object) {
// super.destroyItem(container, position, object);
}
3. 编写三个fragment类(继承自Fragment类)
public class VideoFragment extends Fragment {
在onCreateView方法中能够加载布局
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return LayoutInflater.from(getActivity()).inflate(R.layout.videolayout,container,false);
}
Fragment类中的onActivityCreated方法相当于Activity中的OnCreate方法
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
以此类推,编写另外两个Fragment类……
注意:三个fragment需要绑定三个不同的xml布局文件
4. 在Activity中为ViewPager绑定适配器,并将ViewPager与TabLayout进行绑定
设置Tab标签内容的数组以及装有fragment的链表
String[] titles = {"Tab1","Tab2","Tab3"};
List<Fragment> fragmentList = new ArrayList<>();
在oncreate方法中填充链表
fragmentList.add(new VideoFragment());
fragmentList.add(new ListFragment());
fragmentList.add(new IndividualFragment());
将适配器绑定到ViewPager控件上,并将fragment和标签内容传递进去
然后为TabLayout设置ViewPager
mainBinding.vp.setAdapter(new MyFragAdapter(getSupportFragmentManager(),fragmentList,titles));
mainBinding.tablayout.setupWithViewPager(mainBinding.vp);