前言:

ViewPager是Android 3.0后引入的一个UI控件,用以编写滑动布局,其可以放入ViewFragment,管理方面可以使用FragmentPageAdapterFragmentStatePagerAdapterPagerAdapter来管理页面。但最好使用Fragment(拥有生命周期)来填充而不是ViewFragmentPageAdapter只会缓存当前可视化碎片及邻近三个(不足三个则缓存剩下的),FragmentStatePagerAdapter则只会缓存当前可视化的碎片。关于具体使用哪种适配器取决于具体的业务场景。下面来看一下具体写法。

一:创建要展示的Fragment和xml文件(要滑动几个就创建几个)

这里创建了四个Fragment及其xml文件。逻辑和布局很简单也很相似,这里仅贴出一个Fragment及其布局文件
OneFragment.java

public class OneFragment extends Fragment {public OneFragment() {// Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View fragmentOne = inflater.inflate(R.layout.layout_one, container, false);final TextView textViewOne = (TextView) fragmentOne.findViewById(R.id.test_text_view_one);textViewOne.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {textViewOne.setText("Earth");}});return fragmentOne;}}

layout_one.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"android:background="@color/colorBlue"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/test_text_view_one"android:text="Life"android:textSize="36sp"android:layout_gravity="center"android:paddingTop="150dp"/></LinearLayout>

主活动布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"tools:context=".MainActivity"><androidx.viewpager.widget.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/view_pager"><androidx.viewpager.widget.PagerTabStripandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/view_pager_tab_strip" /></androidx.viewpager.widget.ViewPager></androidx.constraintlayout.widget.ConstraintLayout>

效果图:

(这里我设置的背景为蓝色,读者可以在res/values/color.xml设置颜色)

二:创建适配器(继承于FragmentPagerAdapter)

这里先说明一下其重写方法和常见方法及变量的大概作用

  • List< Fragment >:用来存放碎片的泛型集合
  • List< String >:用来存放标题的泛型集合
  • FragmentManager:管理碎片
  • 构造器:初始化数据
  • getItem():返回具体索引的界面
  • getCount():返回界面数量
  • getPageTitle:返回标题栏具体索引的标题

这里先把适配器全部代码放出然后再说明

public class FragmentViewPagerAdapter extends FragmentPagerAdapter {List<Fragment> fragmentList;List<String> titleList;FragmentManager fragmentManager;public FragmentViewPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) {super(fm);this.fragmentList = fragmentList;this.titleList = titleList;this.fragmentManager = fm;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return fragmentList.size();}@Nullable@Overridepublic CharSequence getPageTitle(int position) {return titleList.get(position);}
}

说明:类成员的作用无需多言,构造器亦是如此。getItem()根据position返回了一个Fragment对象。getCount()根据List< Fragment >的实例对象返回其长度用于决定ViewPager的页面数量。getPageTitle()根据List< String >返回标题的内容。相比使用PagerAdapter而言碎片的使用更加简洁。

三:在Activity中配置

这里先贴出全部代码如下:

public class MainActivity extends AppCompatActivity {List<Fragment> fragmentList = new ArrayList<>();List<String> titleList = new ArrayList<>();ViewPager viewPager;private FragmentManager fragmentManager;private FragmentViewPagerAdapter fragmentViewPagerAdapter;private void initView(){viewPager = (ViewPager) findViewById(R.id.view_pager);OneFragment oneFragment = new OneFragment();TwoFragment twoFragment = new TwoFragment();ThreeFragment threeFragment = new ThreeFragment();FourFragment fourFragment = new FourFragment();fragmentList.add(oneFragment);fragmentList.add(twoFragment);fragmentList.add(threeFragment);fragmentList.add(fourFragment);titleList.add("News");titleList.add("Latest");titleList.add("Located");titleList.add("Favorite");fragmentManager = getSupportFragmentManager();fragmentViewPagerAdapter = new FragmentViewPagerAdapter(fragmentManager, fragmentList, titleList);viewPager.setAdapter(fragmentViewPagerAdapter);viewPager.setCurrentItem(0);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}}

说明:

这是对碎片泛型集合和标题泛型集合进行初始化,接着定义ViewPager对象。

List<Fragment> fragmentList = new ArrayList<>();
List<String> titleList = new ArrayList<>();
ViewPager viewPager;

这里先定义FragmentManager对象用以管理碎片对象,FragmentViewPagerAdapter就是上面我们创建的自定义适配器。

private FragmentManager fragmentManager;
private FragmentViewPagerAdapter fragmentViewPagerAdapter;

下面可能有些长,但内容很简单。先把ViewPager注册,接着实例化我们创建的碎片对象并添加到碎片泛型集合;然后把标题放入标题泛型集合内。最后把FragmentViewPagerAdapter实例化,先传入我们上面定义的FragmentManager对象,然后放碎片泛型集合,标题泛型集合,然后调用ViewPager.setAdapter()把适配器传入即可。

private void initView(){viewPager = (ViewPager) findViewById(R.id.view_pager);OneFragment oneFragment = new OneFragment();TwoFragment twoFragment = new TwoFragment();ThreeFragment threeFragment = new ThreeFragment();FourFragment fourFragment = new FourFragment();fragmentList.add(oneFragment);fragmentList.add(twoFragment);fragmentList.add(threeFragment);fragmentList.add(fourFragment);titleList.add("News");titleList.add("Latest");titleList.add("Located");titleList.add("Favorite");fragmentManager = getSupportFragmentManager();fragmentViewPagerAdapter = new FragmentViewPagerAdapter(fragmentManager, fragmentList, titleList);viewPager.setAdapter(fragmentViewPagerAdapter);viewPager.setCurrentItem(0);}

关于标题栏的风格网上已有很对介绍,使用也很简单,这里不再赘述。

四:效果图

ViewPager 快速上手相关推荐

  1. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

  2. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  3. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

  4. [转载]ESFramework 4.0 快速上手(15) -- 客户端登录验证

    ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实 ...

  5. WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧

    2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发 ...

  6. react 快速上手开发_React中测试驱动开发的快速指南

    react 快速上手开发 by Michał Baranowski 通过MichałBaranowski React中测试驱动开发的快速指南 (A quick guide to test-driven ...

  7. 《Android App开发入门:使用Android Studio 2.X开发环境》——1-3 Android Studio 快速上手...

    1-3 Android Studio 快速上手

  8. Keras快速上手:基于Python的深度学习

    Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...

  9. 快速上手关键词抽取的算法

    前言 在自然语言处理领域,我们有一种类型的问题是如何在一堆文本中提取出核心词/句子.而无论是对于长文本还是短文本,往往几个关键词就可以代表整个文本的主题思想.同时,在很多推荐系统中,由于无法直接就整体 ...

最新文章

  1. 现在python已经更新到哪个版本了-Python 3.8 已发布 你会升级么?
  2. 【分布式】Zookeeper请求处理
  3. mongodb中分页显示数据集的学习
  4. C++学习之路 | PTA乙级—— 1068 万绿丛中一点红 (20 分)(精简)
  5. C++基础11-类和对象之操作符重载2
  6. 笨办法学 Python · 续 练习 8:`cut`
  7. 从输入url到页面加载完成发生了什么
  8. Arcpy基础入门-1、如何使用arcpy
  9. POS58 票据热敏打印机,怎么用ESC/POS命令控制打印文字大小?
  10. 点击click触发两次事件解决办法
  11. python布尔值使用_Python布尔值--True和False
  12. 一些有意思的知识的网站
  13. 测试身体脂肪指数软件,判断肥胖的5个标准,体脂率测试的3个方法
  14. 通过驱动断链来隐藏驱动
  15. 制作一个chrome插件
  16. 曾因“贿赂”苹果被罚款 10.3 亿美元,高通上诉成功
  17. Python生成声音波形、模拟钢琴音色
  18. Spring boot + maven + jetty9在提交表单的时候出现Form too large
  19. git(一)不同情景下的git用法
  20. Linux chmod命令用法

热门文章

  1. 物盾安全汤晓冬:工业互联网企业如何应对高发的供应链安全风险?
  2. vue中import和require的用法
  3. 护眼灯显色指数多大最好?眼科医生推荐灯光显色指数多少合适
  4. Dell R740 USB收集日志
  5. 慧荣SM3267主控芯片量产工具V2.5.31首发
  6. 联想电脑狂按F2不能进入BIOS设置解决办法——通过UEFI固件设置进入BIOS
  7. Deep Multimodal Subspace Clustering Networks
  8. 东莞理工学院计算机考研资料汇总
  9. NodeList ,HTMLCollection
  10. 企业IT管理必备 数据库审计基础介绍