最近在写项目的时候遇到要求使用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配合使用的一点记录的更多相关文章

  1. Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  2. [置顶] xamarin Tablayout+Viewpager+Fragment顶部导航栏

    最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...

  3. TabLayout+ViewPager+Fragment制作页卡

    本人很懒,直接上代码了. 布局文件: <?xml version="1.0" encoding="utf-8"?><android.suppo ...

  4. TabLayout ViewPager Fragment 简介 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 安卓TabLayout+ViewPager实现切页

    安卓使用TabLayout+ViewPager+Fragment 实现页面切换,可实现左右滑动切换视图界面和点击切换 可自定义菜单栏是在顶部还是在底部 一.实现效果: 二.实现过程: 2.1 一些重要 ...

  6. 介绍三个Android支持库控件:TabLayout+ViewPager+RecyclerView

    本文主要介绍如下三个Android支持库控件的配合使用: TabLayout:android.support.design.widget.TabLayout ViewPager:android.sup ...

  7. ViewPagerWithRecyclerDemo【RecyclerView+ViewPager实现类似TabLayout+ViewPager效果】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用RecyclerView+ViewPager实现类似TabLayout+ViewPager效果. 效果图 使用步骤 一.项目组织 ...

  8. TabLayout + ViewPager

    一.实现思路 1.在build.gradle中添加依赖,例如: compile 'com.android.support:support-v4:23.4.0'compile 'com.android. ...

  9. 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab

    大多数应用程序都会在底部使用3~5个Tab对应用程序的主要功能进行划分,对于一些信息量非常大的应用程序,还需要在每个Tab下继续划分子Tab对信息进行分类显示. 本文实现采用FragmentTabHo ...

随机推荐

  1. AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。

    AJ分享,必须精品 简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信.打开其他应用等. 打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL ...

  2. 【Java】Junit单元测试

    什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证. 对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Ja ...

  3. webWMS开发过程记录(三)- 需求分析(略)

    行业:汽车零部件制造 大方向:非唯一码,需有一套简单.易用.受控的误操作撤回机制 现状(略) 目标(略) 注:由于项目是自己根据以往经验,自己开发的,且开发时间不固定,故需求分析暂略,我会把工作重点放 ...

  4. 【jmeter】JDBC请求循环调用的问题

    今天使用jdbc请求从数据库取数据,多次请求使用了循环控制器,但是结果第一个jdbc请求返回值正确,第二次请求返回值为空. 1.从其他博客中得知,需要在jdbc connection configur ...

  5. linux通过进程名查看其占用端口

    1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 参考: https://blog.csdn.net/sinat ...

  6. 莫名的证书错误...ERROR ITMS-90035:"Invalid Signature.

    请删除 .DS_Store 这种类似的文件再尝试

  7. 吊打面试官系列:Redis 性能优化的 13 条军规大全

    1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redi ...

  8. python selenium模块 css定位

    selenium是python的非标准库,使用时需要下载安装 安装命令  pip install selenium selenium是python的自动化测试模块,可以模拟浏览器的行为 所以在使用之前 ...

  9. [V&N2020 公开赛]TimeTravel 复现

    大佬友链(狗头):https://www.cnblogs.com/p201821440039/ 参考博客: https://www.zhaoj.in/read-6407.html https://cj ...

  10. [PHP][thinkphp5] 学习一:增删改查

    <?php namespace app\index\controller; use think\Controller; use think\Db; class Test extends Cont ...