ViewPager 快速上手
前言:
ViewPager是Android 3.0后引入的一个UI控件,用以编写滑动布局,其可以放入View
或Fragment
,管理方面可以使用FragmentPageAdapter
,FragmentStatePagerAdapter
或PagerAdapter
来管理页面。但最好使用Fragment
(拥有生命周期)来填充而不是View
。FragmentPageAdapter
只会缓存当前可视化碎片及邻近三个(不足三个则缓存剩下的),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 快速上手相关推荐
- 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...
- 【转】Vue.js 2.0 快速上手精华梳理
Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...
- 『转载』Debussy快速上手(Verdi相似)
『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...
- [转载]ESFramework 4.0 快速上手(15) -- 客户端登录验证
ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实 ...
- WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧
2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发 ...
- react 快速上手开发_React中测试驱动开发的快速指南
react 快速上手开发 by Michał Baranowski 通过MichałBaranowski React中测试驱动开发的快速指南 (A quick guide to test-driven ...
- 《Android App开发入门:使用Android Studio 2.X开发环境》——1-3 Android Studio 快速上手...
1-3 Android Studio 快速上手
- Keras快速上手:基于Python的深度学习
Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...
- 快速上手关键词抽取的算法
前言 在自然语言处理领域,我们有一种类型的问题是如何在一堆文本中提取出核心词/句子.而无论是对于长文本还是短文本,往往几个关键词就可以代表整个文本的主题思想.同时,在很多推荐系统中,由于无法直接就整体 ...
最新文章
- 现在python已经更新到哪个版本了-Python 3.8 已发布 你会升级么?
- 【分布式】Zookeeper请求处理
- mongodb中分页显示数据集的学习
- C++学习之路 | PTA乙级—— 1068 万绿丛中一点红 (20 分)(精简)
- C++基础11-类和对象之操作符重载2
- 笨办法学 Python · 续 练习 8:`cut`
- 从输入url到页面加载完成发生了什么
- Arcpy基础入门-1、如何使用arcpy
- POS58 票据热敏打印机,怎么用ESC/POS命令控制打印文字大小?
- 点击click触发两次事件解决办法
- python布尔值使用_Python布尔值--True和False
- 一些有意思的知识的网站
- 测试身体脂肪指数软件,判断肥胖的5个标准,体脂率测试的3个方法
- 通过驱动断链来隐藏驱动
- 制作一个chrome插件
- 曾因“贿赂”苹果被罚款 10.3 亿美元,高通上诉成功
- Python生成声音波形、模拟钢琴音色
- Spring boot + maven + jetty9在提交表单的时候出现Form too large
- git(一)不同情景下的git用法
- Linux chmod命令用法