本文实例为大家分享了Android中TabLayout结合ViewPager实现页面切换,供大家参考,具体内容如下

一、实现思路
1、在build.gradle中添加依赖,例如:
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:design:23.4.0'
也可以将support-v4替换为appcompat-v7,例如:
compile 'com.android.support:appcompat-v7:23.4.0'
因为appcompat-v7是依赖于support-v4的。
更多说明可参考官方文档support library部分。
2、在xml中添加TabLayout和ViewPager,例如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tool="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tool:context=".TabViewActivity"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/tabLayoutBackground"
app:tabMode="scrollable"
app:tabTextColor="@color/color_white"
app:tabSelectedTextColor="@color/tabSelectedText"
app:tabIndicatorHeight="3dp"
app:tabIndicatorColor="@color/color_white"/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
TabLayout:
(1)tabMode有两个属性,一个是"scrollable",用于多标签;另一个是"fixed",用于少标签,它会让全部标签平均分布在屏幕上,所以标签不能多,而且名称也不能长,否则会显示不完整。
(2)tabIndicator是指文本下的指示条。当选中一个tab时,指示条才会出现,出现在文本下面。
3、获取View对象
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
4、创建FragmentStatePagerAdaper的子类,并实现构造方法
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
}
创建该类的一个实例对象
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
在这一步中,你可以选择是实现FragmentPagerAdapter的子类,或者是FragmentStatePagerAdapter的子类。
FragmentPagerAdapter用于页数较少的,也就Fragment的数量较少的,因为只要用户还停留在当前的Activity中,其中的Fragment都不会被销毁,所以内存消耗会比较大。
而FragmentStatePagerAdapter的工作原理类似于ListView,只要用户不可见的Fragment,都会被销毁,只保留它的状态。
因为我用的是v4兼容包下的Fragment,所以需要用getSupportFragmentManager()去获取FragmentManager。
5、设置ViewPager和TabLayout
viewPager.setAdapter(viewPagerAdapter); tabLayout.setupWithViewPager(viewPager);
二、完善Adapter
1、重写三个方法
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
......
@Override
public Fragment getItem(int position) {
return null;
}
@Override
public int getCount() {
return 0;
}
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
}
2、创建tab的标题数据:
private String[] mTitles = new String[]{"语文", "英语", "数学", "物理", "生物", "化学", "地理", "政治", "历史"};
创建Fragment的子类:
public class ViewPagerFragment extends Fragment {
private static final String KEY = "extra";
private String mMessage;
public ViewPagerFragment() {
}
public static ViewPagerFragment newInstance(String extra) {
Bundle args = new Bundle();
args.putString(KEY, extra);
ViewPagerFragment fragment = new ViewPagerFragment();
fragment.setArguments(args);
return fragment;
}
}
创建Fragment的集合对象,并添加实例对象到集合里:
private ArrayList<ViewPagerFragment> mViewPagerFragments = new ArrayList<>();
......
for (int i = 0; i < mTitles.length; i++) {
mViewPagerFragments.add(ViewPagerFragment.newInstance(mTitles[i]));
}
3、修改Adapter中的方法
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private String[] titles;
private ArrayList<ViewPagerFragment> viewPagerFragments;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
public void setTitles(String[] titles) {
this.titles = titles;
}
public void setFragments(ArrayList<ViewPagerFragment> viewPagerFragments) {
this.viewPagerFragments = viewPagerFragments;
}
@Override
public Fragment getItem(int position) {
return viewPagerFragments.get(position);
}
@Override
public int getCount() {
return viewPagerFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
4、将数据传给Adapter
viewPagerAdapter.setTitles(mTitles); viewPagerAdapter.setFragments(mViewPagerFragments);
三、完善Fragment
1、fragment_view_pager_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fragment_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"/>
</LinearLayout>
2、完善Fragment的方法
public class ViewPagerFragment extends Fragment {
......
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
mMessage = bundle.getString(KEY);
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view_pager_item, container, false);
TextView textView = (TextView) view.findViewById(R.id.fragment_text);
textView.setText(mMessage);
return view;
}
}
在创建Fragment时,会调用onCreate方法,在其中执行一些状态信息的初始化,用于暂停或停止后的恢复所用。
在Fragment首次加载视图时,会调用onCreateView方法,在其中执行视图的加载和初始化,返回的应该是该Fragment布局的根视图。其中inflate方法的第三个参数代表的意思是,是否要将加载进来的布局(R.layout.fragment_view_pager_item)添加进container这个ViewGroup里。根据官方文档的说明,上例那样做的话,系统已经将这个布局添加进container了,所以这里为false。
静态效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# TabLayout
# ViewPager
# 页面切换
# TabLayout+ViewPager实现切页的示例代码
# TabLayout实现ViewPager指示器的方法
# Android 中基于TabLayout+ViewPager实现标签卡效果
# TabLayout关联ViewPager后不显示文字的解决方法
# Android中TabLayout+ViewPager实现tab和页面联动效果
# Android中TabLayout+ViewPager 简单实现app底部Tab导航栏
# Android中TabLayout结合ViewPager实现页面切换效果
# AndroidUI组件SlidingTabLayout实现ViewPager页滑动效果
# TabLayout+ViewPager2的简单使用详解
# 子类
# 加载
# 较少
# 的是
# 文档
# 你可以
# 首次
# 也就
# 在这
# 出现在
# 是指
# 我用
# 或者是
# 会让
# 重写
# 英语
# 要将
# 第三个
# 会比
# 停留在
相关文章:
微信推文制作网站有哪些,怎么做微信推文,急?
网站制作报价单模板图片,小松挖机官方网站报价?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
如何零成本快速生成个人自助网站?
网站制作企业,网站的banner和导航栏是指什么?
建站主机SSH密钥生成步骤及常见问题解答?
表情包在线制作网站免费,表情包怎么弄?
学校为何禁止电信移动建设网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
制作宣传网站的软件,小红书可以宣传网站吗?
怎么将XML数据可视化 D3.js加载XML
海南网站制作公司有哪些,海口网是哪家的?
网站制作模板下载什么软件,ppt模板免费下载网站?
建站之星代理费用多少?最新价格详情介绍
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
阿里云网站制作公司,阿里云快速搭建网站好用吗?
临沂网站制作公司有哪些,临沂第四中学官网?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
已有域名和空间如何搭建网站?
宝塔新建站点为何无法访问?如何排查?
Python文件管理规范_工程实践说明【指导】
如何在云指建站中生成FTP站点?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在阿里云购买域名并搭建网站?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
微课制作网站有哪些,微课网怎么进?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何安全更换建站之星模板并保留数据?
如何快速上传建站程序避免常见错误?
建站之星如何取消后台验证码生成?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
免费视频制作网站,更新又快又好的免费电影网站?
网站制作网站,深圳做网站哪家比较好?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何在阿里云通过域名搭建网站?
详解jQuery停止动画——stop()方法的使用
如何在Windows环境下新建FTP站点并设置权限?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何确保西部建站助手FTP传输的安全性?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
简历在线制作网站免费,免费下载个人简历的网站是哪些?
如何在自有机房高效搭建专业网站?
,网页ppt怎么弄成自己的ppt?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何基于云服务器快速搭建个人网站?
股票网站制作软件,网上股票怎么开户?
*请认真填写需求信息,我们会在24小时内与您取得联系。