使用 TabLayout 很容易实现选项卡的功能。这里将结合 ViewPager、Fragment、TabLayout实现一个具有选项卡功能的程序。本例再上篇讲解的ViewPager与Fragment实例上修改,请结合上篇实例参考。

要实现这样一个程序,首先需要在布局文件中加入 TabLayout。MainActivity中对应的布局文件代码如下:

<?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"tools:context=".MainActivity"><com.google.android.material.tabs.TabLayoutandroid:id="@+id/tab"app:tabMode="fixed"android:layout_width="match_parent"android:layout_height="wrap_content" /><androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

完成这些后,3个Fragment类文件不变,修改适配器类:

package com.rfstar.viewpagertest03;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;import java.util.List;public class FragmentAdapter extends FragmentPagerAdapter {private List<Fragment> fragmentList;private List<String> tabList;public FragmentAdapter(FragmentManager fm,List<Fragment>fragmentList,List<String>tabList){super(fm);this.fragmentList=fragmentList;this.tabList=tabList;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return fragmentList.size();}@Overridepublic CharSequence getPageTitle(int position){return tabList.get(position);}
}

通过观察修改之后的适配器类可以发现其实就是加入了一个存储选项卡内容的列表以及一个获取选项卡内容的方法。MainActivity的代码如下:

package com.rfstar.viewpagertest03;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.view.View;
import android.widget.TableLayout;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);FragmentManager fragmentManager=getSupportFragmentManager();List<Fragment> fragments=new ArrayList<Fragment>();fragments.add(new FirstFragment());fragments.add(new SecondFragment());fragments.add(new ThirdFragment());List<String> tabs=new ArrayList<>();tabs.add("首页");tabs.add("社区");tabs.add("新闻");FragmentAdapter fragmentAdapter=new
FragmentAdapter(fragmentManager,fragments,tabs);ViewPager viewPager=(ViewPager)findViewById(R.id.viewPager);viewPager.setAdapter(fragmentAdapter);TabLayout tabLayout= (TabLayout) findViewById(R.id.tab);tabLayout.setupWithViewPager(viewPager);}
}

此时运行程序就出现了选项卡功能,不管是点击选项卡标签还是滑动界面都可以进行界面切换,效果如下图:

本实例与之前的实例区别在于程序的最后多了一个步骤。TabLayout 调用 setupWithViewPager(ViewPager viewPager)方法与ViewPager 方法进行了绑定。具体来说就是在这个方法内,使用 viewPager 调用 getAdapter()方法获取了

viewPager 的适配器,然后调用 setPagerAdapter(adapter, true)方法设置了适配器。

此处需要提醒大家的是,可能 tabLayout.setupWithViewPager(viewPager)之后还有 tabLayout.setTabsFromPagerAdapter(framentAdapter)这样一行代码。这是因为在较早的版本中必须使用该方法才能设置适配器。但是该方法有较多缺陷,Google公司将之废除了,并在 setupWithViewPager(ViewPager viewPager)方法中加入了执行设置适配器的功能。

这种方式是很多人喜欢使用的一种开发选项卡的方式,但是建议大家还是使用自定义的方式来进行开发选项卡∶

(1)在布局文件中引入 TabLayout。

(2)在 Activity 中获取 TabLayout,并设置 tab 以及监听事件。在监听事件中设置点击某个 tab 时进入某个对应索引的 ViewPager 页面或者 Fragment。

(3)设置 ViewPager 的监听事件,当滑动切换到某个页面或者 Fragment 时选中对应索引的 tab。

在之前的实例上做上面的修改也是可以实现选项卡功能的,这里不再详细讲解,希望大家可以按照上述实现思路进行练习。

源码下载地址:链接:https://pan.baidu.com/s/1ExoSxaQRdjmwUUnDuSbUIQ 提取码:43ka

android之ViewPager与TabLayout相关推荐

  1. android tab 切换动画,Android之ViewPager+TabLayout组合实现导航条切换效果(微信和QQ底部多标签切换)...

    前言 之前在另外一篇中用Fragment和button实现了点击切换Fragment的效果,比较简陋.这次改用ViewPager+TabLayout 实现联动的效果. 实现效果 ViewPager 多 ...

  2. android 控件 margin,Android MarginDesign控件TabLayout导航栏使用详解

    TabLayout的使用简单介绍 比如在平常的项目中实现这样的效果,一般都是都会使用viewPageIndicate等几个开源框架直接实现,或者使用自定义的HorizontalScroll再配合Vie ...

  3. Android基础控件——TabLayout的使用、仿爱奇艺导航条

    TabLayout的使用.仿爱奇艺导航条 学习,学习,学以致用,让基础控件贴近实战效果 TabLayout是Google新推出的Material Design的控件之一,TabLayout的使用必须结 ...

  4. android 弹出fragment,Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...

  5. android双重for循环,Android实现ViewPager无限循环效果(二)

    本文实例为大家分享了Android实现ViewPager无限循环效果的第二种方式,供大家参考,具体内容如下 原理:在Adapter中将getCount设置为无限大 package com.xiaoma ...

  6. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  7. android 禁止Viewpager左右滑动功能

    今天,简单讲讲Android如何禁止Viewpager左右滑动功能. 原理: 百度后发现重写ViewPager,覆盖ViewPager的onInterceptTouchEvent(MotionEven ...

  8. Android开发之使用TabLayout快速实现选项卡切换功能(附源码下载)

    看下效果图: 先看下布局: TabLayout的简单使用: 当选项卡过少时候设置填充全屏app:tabGravity="fill"设置下面切换选项卡的小滑片颜色app:tabInd ...

  9. android tab 点击,TabLayout.Tab点击事件

    1,大家都知道 android.support.design.widget.TabLayout 中的TabLayout并没有点击事件 只有addOnTabSelectedListener这个选中监听, ...

最新文章

  1. amazon redshift 分析型数据库特点——本质还是列存储
  2. 初识Django —Python API接口编程入门
  3. java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)
  4. python服务器稳定性,一种基于Python服务器稳定性测试的方法技术
  5. SAP ADBC和JDBC的对比
  6. linux红帽子怎么配置dhcp,LinuxDHCP的高级配置如何应用呢?
  7. Asp.net 2.0 发送电子邮件
  8. android qt 串口通信,Qt串口通信开发之QSerialPort模块详细使用方法与实例
  9. 【webpack】从零开始学webpack
  10. protobuf序列化协议python教程
  11. MFC列表控件report报表可编辑操作
  12. jzoj1212 重建道路
  13. 原神3.4私服一键包搭建教程windows+linux
  14. Python 克莱姆法则求解方程组
  15. Java和C、C++比较
  16. 《图解密码技术》——读书笔记
  17. 双指针算法何时加减令人头秃怎么办
  18. 【JAVA】JAVA关键字
  19. FANUC机器人SRVO-459伺服报警及处理办法
  20. 在mac上面运行cherrytree

热门文章

  1. 【python】查看图像位深度,以及改变图像位深度的简单小结
  2. MIT 6.001X 2016 (6) dictionaries 字典
  3. 【设计模式】行为型02模板方法模式(Template Method Patten)
  4. Glide java.io.IOException(File unsuitable for memory mapping)
  5. 2018年5月初丽江大理一周自由行
  6. 最近苹果开发者支持电话更换了,再也不需要自己给苹果打电话了
  7. 【洞见研报】研报速读:新国货研究院——巧克力品类报告(可可脂,健康,国货)
  8. 洛谷 P3271 [JLOI2016]方
  9. mysql 左对齐_CSS:左对齐标签,右对齐(CSS : Align label left, text right)
  10. Unity中的Shuriken粒子系统(6)