关于tablayout+viewpager+fragment配合使用的一点记录
最近在写项目的时候遇到要求使用tablayout和fragment,遇到了这里记录一下大致思路。
tablayout是头部可以左右切换的头部控制栏控件,配合viewpager使用,fragment是碎片,可以放在viewpager里面,实现类似网易云音乐首页切换的效果。效果图如下:

首先添在build.gradle里面添加依赖:
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:design:28.0.0'
然后在布局文件里写好tablayout和viewpager
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#06a5fa"
app:popupTheme="@style/AppTheme.PopupOverlay" /> <android.support.design.widget.TabLayout
android:id="@+id/Tablayout"
app:tabBackground="@android:color/white"
app:tabIndicatorColor="@color/colorAccent"
app:tabTextColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"/> <android.support.v4.view.ViewPager
android:id="@+id/Viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout> <include
app:layout_behavior="@string/appbar_scrolling_view_behavior"
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true" /> </android.support.v4.widget.DrawerLayout>
由于tablayout只是项目要求中的一个,所以代码中有一些其他的布局文件,重点看tablayout和viewpager
然后首先在activity里面初始化控件和两个list还有要用到的fragment:
private TabLayout tabLayout;
private ViewPager viewPager;
private ArrayList<String> TitleList = new ArrayList<>(); //页卡标题集合
private ArrayList<Fragment> ViewList = new ArrayList<>(); //页卡视图集合
private Fragment all_Fragment,recent_Fragment,like_Fragment; //页卡视图
titlelist用来储存tab的标题,viewlist用来储存视图,剩下的三个fragment就是我们要呈现的视图,当然上面代码中的三个fragment是我继承fragment后自己重写的,代码如下:
public class All_Fragment extends Fragment {
private View rootView;
private RecyclerView recyclerView;
private SwipeRefreshLayout swipeRefreshLayout;
private StringBuilder response;
List<Map<String,Object>> list=new ArrayList<>();
private int flag;
public static final int GET_DATA_SUCCESS = 1;
private String id;
private String thumbnail;
private String description;
private String name;
@Override
public void onAttach(Context context){
super.onAttach(context);
}
@Override
public View onCreateView(@Nullable LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
rootView = inflater.inflate(R.layout.activity_all_column_,container,false);
initUi();
return rootView;
}
private void initUi(){
//这里写加载布局的代码
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//这里写逻辑代码
44 }
45 }
篇幅原因,这里只贴一个fragment的代码,另外两个类似.
上述工作完成之后,在activity的oncreate方法中找到我们在布局文件xml中定义的控件:
//首先找到tablayout控件和view pager控件
tabLayout = findViewById(R.id.Tablayout);
viewPager = findViewById(R.id.Viewpager);
然后将fragment在后面new出来:
all_Fragment = new All_Fragment();
recent_Fragment = new Recent_Fragment();
like_Fragment = new Like_Fragment();
然后将fragment添加到页卡视图的集合里面去:
//添加页卡视图
ViewList.add(all_Fragment);
ViewList.add(recent_Fragment);
ViewList.add(like_Fragment);
将想要设置的tab标题添加到titlelist:
//添加页卡标题
TitleList.add("栏目总览");
TitleList.add("热门消息");
TitleList.add("我的收藏");
设置tab的显示模式并添加tab选项卡:
//设置tab模式
tabLayout.setTabMode(TabLayout.MODE_FIXED);
//添加tab选项卡
tabLayout.addTab(tabLayout.newTab().setText(TitleList.get(0)));
tabLayout.addTab(tabLayout.newTab().setText(TitleList.get(1)));
tabLayout.addTab(tabLayout.newTab().setText(TitleList.get(2)));
设置viewpager的adapter并与tab绑定:
//设置adapter
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()){ //获取每个页卡
@Override
public android.support.v4.app.Fragment getItem(int position){
return ViewList.get(position);
} //获取页卡数
@Override
public int getCount(){
return TitleList.size();
} //获取页卡标题
@Override
public CharSequence getPageTitle(int position){
return TitleList.get(position);
}
}); //tab与viewpager绑定
tabLayout.setupWithViewPager(viewPager);
这样大致框架就搭建好了,想要实现的具体内容可以写在fragment里面,下面是我简单加载图片后的效果:

菜鸟一枚,有什么错误的地方请多指正,感激不尽!
关于tablayout+viewpager+fragment配合使用的一点记录的更多相关文章
- Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- [置顶]
xamarin Tablayout+Viewpager+Fragment顶部导航栏
最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...
- TabLayout+ViewPager+Fragment制作页卡
本人很懒,直接上代码了. 布局文件: <?xml version="1.0" encoding="utf-8"?><android.suppo ...
- TabLayout ViewPager Fragment 简介 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 安卓TabLayout+ViewPager实现切页
安卓使用TabLayout+ViewPager+Fragment 实现页面切换,可实现左右滑动切换视图界面和点击切换 可自定义菜单栏是在顶部还是在底部 一.实现效果: 二.实现过程: 2.1 一些重要 ...
- 介绍三个Android支持库控件:TabLayout+ViewPager+RecyclerView
本文主要介绍如下三个Android支持库控件的配合使用: TabLayout:android.support.design.widget.TabLayout ViewPager:android.sup ...
- ViewPagerWithRecyclerDemo【RecyclerView+ViewPager实现类似TabLayout+ViewPager效果】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用RecyclerView+ViewPager实现类似TabLayout+ViewPager效果. 效果图 使用步骤 一.项目组织 ...
- TabLayout + ViewPager
一.实现思路 1.在build.gradle中添加依赖,例如: compile 'com.android.support:support-v4:23.4.0'compile 'com.android. ...
- 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab
大多数应用程序都会在底部使用3~5个Tab对应用程序的主要功能进行划分,对于一些信息量非常大的应用程序,还需要在每个Tab下继续划分子Tab对信息进行分类显示. 本文实现采用FragmentTabHo ...
随机推荐
- Application.Exit
Application.Exit:通知winform消息循环退出.Environment.Exit:终止当前进程,返回exitcode给操作系统 Application.Exit会在所有前台线程退出后 ...
- C#中分布式事务的超时处理问题
事务是个很精妙的存在,我们在数据层.服务层.业务逻辑层等多处地方都会使用到. 在这里我只说下TransactionScope这个微软推荐使用的隐式事务.它是从Framework 2.0开始引入的一个事 ...
- stand up meeting 1/11/2016
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 跑通打印机功能,尝试与pdf读取部分结合;生词本卡片选择简略释义 ...
- Eclipse Hadoop源码阅读环境
一.解压hadoop src包到workspace目录.为加快下载jar包的速度,在eclipse的maven设置里将配置文件的路径设置正确,然后配置maven的settings.xml: <m ...
- Jmeter接口测试、性能测试详细介绍
下面主要就是讲一下Jmeter工具的用法,用法非常简单,比起loadrunner不知道简单多少,并且开源免费~~ 1.接口简介 接口定义 接口: 就是数据交互的入口和出口,是一套标准规范. 接口(硬件 ...
- python 获取的json字符串取值
获取到的json字符串,然后对其取值 {u'result': {u'10.10.10.100': {u'status': u'OK', u'msg': u"{'listen': {'': s ...
- Golang Map实现(一)
本文学习 Golang 的 Map 数据结构,以及map buckets 的数据组织结构. hash 表是什么 从大学的课本里面,我们学到:hash 表其实就是将key 通过hash算法映射到数组的某 ...
- 机器学习5- 对数几率回归+Python实现
目录 1. 对数几率回归 1.1 求解 ω 和 b 2. 对数几率回归进行垃圾邮件分类 2.1 垃圾邮件分类 2.2 模型评估 混淆举证 精度 交叉验证精度 准确率召回率 F1 度量 ROC AUC ...
- TensorFlow1.0 线性回归
import tensorflow as tf import numpy as np #create data x_data = np.random.rand(100).astype(np.float ...
- keras API的使用,神经网络层,优化器,损失函数,查看模型层数,compile和fit训练
layers介绍 Flatten和Dense介绍 优化器 损失函数 compile用法 第二个是onehot编码 模型训练 model.fit 两种创建模型的方法 from tensorflow.p ...