关于tablayout+viewpager+fragment配合使用的一点记录

最近在写项目的时候遇到要求使用tablayout和fragment,遇到了这里记录一下大致思路。

tablayout是头部可以左右切换的头部控制栏控件,配合viewpager使用,fragment是碎片,可以放在viewpager里面,实现类似网易云音乐首页切换的效果。效果图如下:

首先添在build.gradle里面添加依赖:

1     implementation ‘com.android.support:support-v4:28.0.0‘
2     implementation ‘com.android.support:design:28.0.0‘

然后在布局文件里写好tablayout和viewpager

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <android.support.v4.widget.DrawerLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:app="http://schemas.android.com/apk/res-auto"
 5     xmlns:tools="http://schemas.android.com/tools"
 6     android:id="@+id/drawer_layout"
 7     android:layout_width="match_parent"
 8     android:layout_height="match_parent"
 9     android:fitsSystemWindows="true"
10     tools:openDrawer="start">
11
12
13     <LinearLayout
14         android:layout_width="match_parent"
15         android:layout_height="match_parent"
16         android:orientation="vertical"
17         app:layout_behavior="@string/appbar_scrolling_view_behavior">
18
19         <android.support.v7.widget.Toolbar
20             android:id="@+id/toolbar"
21             android:layout_width="match_parent"
22             android:layout_height="?attr/actionBarSize"
23             android:background="#06a5fa"
24             app:popupTheme="@style/AppTheme.PopupOverlay" />
25
26
27           <android.support.design.widget.TabLayout
28               android:id="@+id/Tablayout"
29               app:tabBackground="@android:color/white"
30               app:tabIndicatorColor="@color/colorAccent"
31               app:tabTextColor="@android:color/black"
32               android:layout_width="match_parent"
33               android:layout_height="wrap_content"/>
34
35               <android.support.v4.view.ViewPager
36                   android:id="@+id/Viewpager"
37                   android:layout_width="match_parent"
38                   android:layout_height="match_parent">
39               </android.support.v4.view.ViewPager>
40     </LinearLayout>
41
42     <include
43         app:layout_behavior="@string/appbar_scrolling_view_behavior"
44         layout="@layout/app_bar_main"
45         android:layout_width="match_parent"
46         android:layout_height="match_parent" />
47
48     <android.support.design.widget.NavigationView
49         android:id="@+id/nav_view"
50         android:layout_width="wrap_content"
51         android:layout_height="match_parent"
52         android:layout_gravity="start"
53         android:fitsSystemWindows="true" />
54
55 </android.support.v4.widget.DrawerLayout>

由于tablayout只是项目要求中的一个,所以代码中有一些其他的布局文件,重点看tablayout和viewpager

然后首先在activity里面初始化控件和两个list还有要用到的fragment:

1        private TabLayout tabLayout;
2        private ViewPager viewPager;
1         private ArrayList<String> TitleList = new ArrayList<>();  //页卡标题集合
2         private ArrayList<Fragment> ViewList = new ArrayList<>();   //页卡视图集合
3         private Fragment all_Fragment,recent_Fragment,like_Fragment;  //页卡视图    

titlelist用来储存tab的标题,viewlist用来储存视图,剩下的三个fragment就是我们要呈现的视图,当然上面代码中的三个fragment是我继承fragment后自己重写的,代码如下:

 1 public class All_Fragment extends Fragment {
 2
 3
 4     private View rootView;
 5     private RecyclerView recyclerView;
 6     private SwipeRefreshLayout swipeRefreshLayout;
 7     private StringBuilder response;
 8     List<Map<String,Object>> list=new ArrayList<>();
 9
10
11
12     private int flag;
13     public static final int GET_DATA_SUCCESS = 1;
14     private String id;
15     private String thumbnail;
16     private String description;
17     private String name;
18
19
20     @Override
21     public void onAttach(Context context){
22         super.onAttach(context);
23     }
24
25
26     @Override
27     public View onCreateView(@Nullable LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
28         rootView = inflater.inflate(R.layout.activity_all_column_,container,false);
29        32         initUi();
33         return rootView;
34     }
35
36     private void initUi(){
37            //这里写加载布局的代码
38     }
39
40     @Override
41     public void onActivityCreated(Bundle savedInstanceState){
42         super.onActivityCreated(savedInstanceState);
43              //这里写逻辑代码
44             }
45     }

篇幅原因,这里只贴一个fragment的代码,另外两个类似.

上述工作完成之后,在activity的oncreate方法中找到我们在布局文件xml中定义的控件:

1 //首先找到tablayout控件和view pager控件
2         tabLayout = findViewById(R.id.Tablayout);
3         viewPager = findViewById(R.id.Viewpager);

然后将fragment在后面new出来:

1         all_Fragment = new All_Fragment();
2         recent_Fragment = new Recent_Fragment();
3         like_Fragment = new Like_Fragment();

然后将fragment添加到页卡视图的集合里面去:

1  //添加页卡视图
2         ViewList.add(all_Fragment);
3         ViewList.add(recent_Fragment);
4         ViewList.add(like_Fragment);

将想要设置的tab标题添加到titlelist:

1 //添加页卡标题
2         TitleList.add("栏目总览");
3         TitleList.add("热门消息");
4         TitleList.add("我的收藏");

设置tab的显示模式并添加tab选项卡:

1         //设置tab模式
2         tabLayout.setTabMode(TabLayout.MODE_FIXED);
3         //添加tab选项卡
4         tabLayout.addTab(tabLayout.newTab().setText(TitleList.get(0)));
5         tabLayout.addTab(tabLayout.newTab().setText(TitleList.get(1)));
6         tabLayout.addTab(tabLayout.newTab().setText(TitleList.get(2)));

设置viewpager的adapter并与tab绑定:

 1 //设置adapter
 2         viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()){
 3
 4             //获取每个页卡
 5             @Override
 6             public android.support.v4.app.Fragment getItem(int position){
 7                 return ViewList.get(position);
 8             }
 9
10             //获取页卡数
11             @Override
12             public int getCount(){
13                 return  TitleList.size();
14             }
15
16             //获取页卡标题
17             @Override
18             public CharSequence getPageTitle(int position){
19                 return TitleList.get(position);
20             }
21                              });
22
23         //tab与viewpager绑定
24         tabLayout.setupWithViewPager(viewPager);

这样大致框架就搭建好了,想要实现的具体内容可以写在fragment里面,下面是我简单加载图片后的效果:

菜鸟一枚,有什么错误的地方请多指正,感激不尽!

原文地址:https://www.cnblogs.com/999625696397qq/p/10425883.html

时间: 2024-11-10 04:54:57

关于tablayout+viewpager+fragment配合使用的一点记录的相关文章

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

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解Android 卷Ⅰ,Ⅱ,Ⅲ>中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!! 前言 上一篇文章中我们使用底部导航+Fragment的方式实现了Android主流App中大都存在的设计.并命名其为"Fragment最佳实践",作为想到单独使用Fragment的用

Android滑动导航菜单TabLayout+ViewPager+Fragment

1.主要的Activity--MemberDetailActivity 2.Activity视图的xml文件--R.layout.activity_member_detail 3.自定义的Fragment子类--CustomTrainingFragment 4.Fragment视图的xml文件-- 5.自定义Fragment子类的适配器 //1.MemberDetailActivitypackage com.vimems.coach; import android.os.Bundle; impo

Android 导航条效果实现(六) TabLayout+ViewPager+Fragment

TabLayout 一.继承结构 public class TabLayout extends HorizontalScrollView java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.HorizontalScrollView ? android.support.design.widget.TabLayout 二.TabLayou

TabLayout+ViewPager+Fragment制作页卡

本人很懒,直接上代码了. 布局文件: <?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-

cathome 猫家 开发日记-tablayout+viewpager+fragment

概述 1.tablayout.纯粹就是一个滑动菜单,只是多加一个事件,触发viewpager的滑动. 2.viewpage,是主角,一般是设定  adapter,在 adapter中,决定如何显示view,以及显示多少个view. 这里系统已经封装了一个adapter叫 fragmentadapter.转为针对view里面放fragment  的.并且主要方法为 public Fragment getItem(int i) 所以建立多个fragment  .并传递给adapter. 就可以.主体

TabLayout+ViewPager+Fragment 快速实现标题切换效果

首先呢,这个控件使用起来并不难,算是非常简单的了,不过这个 TabLayout 的 setupWithViewPager 方法有坑,要注意了,具体什么坑,自己踩过才有映像,我这里就不说了,就介绍一下如何使用吧. 在 FragmentOne 中的布局文件里面添加一个 ViewPager 和一个 TabLayout,代码如下: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:and

关于ViewPager和Fragment配合使用生命周期的问题。

首先,我们这篇博文只探讨一个很小的问题. 就是在ViewPager和Fragment配合使用时的生命周期调用问题. 先给出结论吧: 1.当屏幕显示出你第N个Fragment时,你的第(N-1)和第(N+1)个Fragment会执行其生命周期到Onresume阶段. 2.除以上三个Fragment以外的全部fragment的所有方法都不会被调用. 下面是验证代码: 首先是我的MainActivity() public class MainActivity extends FragmentActiv

处女男学Android(十一)---Gallery、ViewPager和ViewPager+Fragment实现的Tab导航

一.前言 有阵子没更新博客了,主要是最近公司接了个P2P的金融借贷项目没人做,被拉去写服务端,所以迟迟没时间继续学习大安卓,想了想自己的安卓水平和公司的专业安卓璟博比起来依旧差距挺大,于是乎我要加把劲赶上才行,所以继续翻开李刚疯狂讲义系列,看到Gallery这个控件了,大致功能是横向滚动查看列表项,再仔细看了一下居然过时了,官方推荐用ViewPager来替代,还没学就过时了,有点不爽,干脆新的旧的一起学习一下,也好进行一下比较吧.废话不多说,首先是已经过时的Gallery. 二.画廊视图Gall

Android ViewPager + Fragment的布局

ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html 2.这里用ViewPager+Fragment做个导航界面: 效果图如下: 3.对实现的思路进行一个简单的介绍: 上面的导航菜单里面的选项卡的总长度是超过了屏幕的,所以用了一个自定义HorizontalScrollView,在自定义HorizontalScrollView中加了两个箭头的图片根据滚动