android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android-support-v4.jar、细节无法控制。不过现在情况已经不一样了,android-support-v4中提供了很多实用的功能,以至于现在新建一个android工程默认都会导入这个jar包。那我们就也采用viewpager来做滑动吧。另外一个概念就是Fragment和FragmentActivity,Fragment是一个特殊的类,有着和activity一致的生命周期和view一致的界面,也就是Fragment就等于具有生命周期的View,但是,要注意的是:Fragment并不是View,它和View没有继承关系。使用Fragment的好处是:Fragment可以重用,而且每个Fragment可以在内部处理自己的业务就像activity一样,这样模块间耦合较低,比把所有的业务都写在一个activity内部逻辑要清晰很多。还有就是,由于每个模块的业务都在Fragment内部来实现,这样activity只要管理好几个Fragment就行了,不需要做和业务相关的事情,最后,Fragment可以用来做不同分辨率机型的适配。Fragment在sdk(android 3.0及更高)和android-support-v4里面都有,但是由于兼容性的问题,我们只能使用android-support-v4里面的Fragment,除非你想你的apk只跑在3.0以后的android手机上,FragmentActivity的情况和Fragment类似。关于Fragment和FragmentActivity,其实有一些基本的用法需要了解一下,但是考虑到Fragment不是本文的重点,所以这里就不介绍了,另外,本文只用Fragment做了一个简单的界面,大家应该一看就懂,好了,言归正传。

ViewPager + Fragment 经常用到 代码是从 actionbarsherlock 中提取出来的,这个效果都知道是 滑动来切换的。直接上代码了

在这里简单说明一下 FragmentStatePagerAdapter 和 FragmentPagerAdapter

2个adapter:

第一种 fragment状态adapter - 在当前只会存在 前1个fragment 当前 fragment 和 下1个 fragment 其他销毁 ,适合加载多数据;

第二种 FragmentPagerAdapter - 全部存在,所以不太适合加载 大量的数据 如图片什么的,很容易内存溢出。

工程结构:

6599debec08fc7df65ee298d44e14069.png

1.activity adapter 在一起 (static类型的 Fragment)public class ViewPageFragment extends FragmentActivity {

//这个是有多少个 fragment页面

static final int NUM_ITEMS = 5;

private MyAdapter mAdapter;

private ViewPager mPager;

private int nowPage;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.pagers_fragment_main);

mAdapter = new MyAdapter(getSupportFragmentManager() );

mPager = (ViewPager)findViewById(R.id.mypagers_pager);

mPager.setAdapter(mAdapter);

}

/**

* 有状态的 ,只会有前3个存在 其他销毁, 前1个, 中间, 下一个

*/

public static class MyAdapter extends FragmentStatePagerAdapter {

public MyAdapter(FragmentManager fm) {

super(fm);

}

@Override

public int getCount() {

return NUM_ITEMS;

}

//得到每个item

@Override

public Fragment getItem(int position) {

return ArrayFragment.newInstance(position);

}

// 初始化每个页卡选项

@Override

public Object instantiateItem(ViewGroup arg0, int arg1) {

// TODO Auto-generated method stub

return super.instantiateItem(arg0, arg1);

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

System.out.println( "position Destory" + position);

super.destroyItem(container, position, object);

}

}

/**

* 无状态的 会全部加载着, 这个适合少量的 特别多的图片啊啥的 还是用 FragmentStatePagerAdapter

* @author lilei

*/

// public static class MyAdapter extends FragmentPagerAdapter {

// public MyAdapter(FragmentManager fm ) {

// super(fm);

//

// }

//

// @Override

// public int getCount() {

// return NUM_ITEMS;

// }

//

// @Override

// public Fragment getItem(int position) {

// // 返回相应的 fragment

// return ArrayFragment.newInstance(position);

// }

//

// @Override

// public void destroyItem(ViewGroup container, int position, Object object) {

// System.out.println( "position Destory" + position);

// super.destroyItem(container, position, object);

// }

// }

/**

* 所有的 每个Fragment

*/

public static class ArrayFragment extends Fragment {

int mNum;

static ArrayFragment newInstance(int num) {

ArrayFragment array= new ArrayFragment();

Bundle args = new Bundle();

args.putInt("num", num);

array.setArguments(args);

return array;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mNum = getArguments() != null ? getArguments().getInt("num") : 1;

System.out.println("mNum Fragment create ="+ mNum);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

System.out.println("onCreateView = ");

//在这里加载每个 fragment的显示的 View

View v = null;

if(mNum == 0){

v = inflater.inflate(R.layout.pagers_fragment1, container, false);

((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");

}else if(mNum == 1){

v = inflater.inflate(R.layout.pagers_fragment1, container, false);

((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");

}else if(mNum == 2){

v = inflater.inflate(R.layout.pagers_fragment1, container, false);

((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");

}else{

v = inflater.inflate(R.layout.pagers_fragment1, container, false);

((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");

}

return v;

}

@Override

public void onActivityCreated(Bundle savedInstanceState) {

System.out.println("onActivityCreated = ");

super.onActivityCreated(savedInstanceState);

}

@Override

public void onDestroyView(){

System.out.println(mNum + "mNumDestory");

super.onDestroyView();

}

@Override

public void onDestroy(){

super.onDestroy();

}

}

}

2. 和 1也没什么太大区别( 个中用处 看个人了 )public class ViewPageFragmentCS extends FragmentActivity {

//这个是有多少个 fragment页面

private MyAdapter mAdapter;

private ViewPager mPager;

private List list = new ArrayList();;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.pagers_fragment_main);

for (int i = 0; i < 7 ; i++) {

Entity ee = new Entity();

ee.name = "ll"+ i;

ee.age = ""+ i;

list.add(ee);

}

mAdapter = new MyAdapter(getSupportFragmentManager(),list);

mPager = (ViewPager)findViewById(R.id.mypagers_pager);

mPager.setAdapter(mAdapter);

}

private class Entity{

public String name;

public String age;

}

// 在这里你可以传 list 也可以传递 list数据

public class MyAdapter extends FragmentStatePagerAdapter {

List list_ee;

public MyAdapter(FragmentManager fm, List ee) {

super(fm);

this.list_ee = ee ;

}

@Override

public int getCount() {

return list_ee.size();

}

// 初始化每个页卡选项

@Override

public Object instantiateItem(ViewGroup arg0, int position) {

ArrayFragment ff = (ArrayFragment)super.instantiateItem(arg0, position);

ff.setThings(list_ee.get(position),position);

return ff;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

System.out.println( "position Destory" + position);

super.destroyItem(container, position, object);

}

@Override

public Fragment getItem(int arg0) {

// TODO Auto-generated method stub

return new ArrayFragment();

}

}

/**

* 所有的 每个Fragment

*/

public class ArrayFragment extends Fragment {

private Entity ee;

private int position;

public void setThings(Entity ee,int position){

this.ee =ee ;

this.position = position;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

System.out.println("onCreateView = ");

//在这里加载每个 fragment的显示的 View

View v = inflater.inflate(R.layout.pagers_fragment1, container, false);

((TextView)v.findViewById(R.id.textView1)).setText(ee.name+ "= ee.Name -=age"+ ee.age);

return v;

}

@Override

public void onActivityCreated(Bundle savedInstanceState) {

System.out.println("onActivityCreated = ");

super.onActivityCreated(savedInstanceState);

}

@Override

public void onDestroyView(){

System.out.println("onDestroyView = "+ position);

super.onDestroyView();

}

@Override

public void onDestroy(){

System.out.println("onDestroy = "+ position);

super.onDestroy();

}

}

}

直接复制过去就可以看效果了 别忘记 V4包,xml 布局文件 自己随便整个吧。

滑动到第3个页面的时候可以看到第1个页面销毁第4个生成,当前存在2、3、4:

85dcefe97da3ef4630a731d956c9349d.png

更多Android App中使用ViewPager+Fragment实现滑动切换效果相关文章请关注PHP中文网!

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相对路径./与../区别

一、基本概念 1、相对路径-顾名思义&#xff0c;相对路径就是相对于当前文件的路径。网页中一般表示路径使用这个方法。 2、绝对路径-绝对路径就是你的主页上的文件或目录在硬盘上真正的路径。绝对路径就是你的主页上的文件或目录在硬盘上真正的路径&#xff0c;比如&#xff0…

shouji android输入法,安卓手机主流输入法对比

什么是合格的输入法&#xff1f;1. 按键布局合理2. 词库丰富且云识别准确3. 文字编辑4. 符号快捷输入5. 翻译功能6. 语音识别转文字对比五款主流输入法&#xff1a;触宝、百度、搜狗、讯飞、QQ均为默认皮肤和设置。1. 按键布局从哪进从哪出&#xff0c;这应该是一个输入法最基本…

DS博客作业06--图

1.本周学习总结 1.思维导图 2.谈谈你对图结构的认识及学习体会。 原本以为树已经够难的了&#xff0c;结果发现觉得太早了。图好难&#xff0c;看不懂。图是由两个集合V和E组成&#xff0c;V指的是顶点的有限集合&#xff0c;E代表两个不同顶点的边的有限集合&#xff0c;图也分…

c 给定字符串中查找_面试 | 查找类算法精析

点击上方蓝字设为星标每周一、三、五上午 8:30 准时推送下面开始今天的学习&#xff5e;前言查找&#xff0c;是使用计算机处理问题时的一个最基本的任务&#xff0c;因此也是算法面试中非常常见的一类问题。很多算法问题的本质&#xff0c;就是要能够高效使用查找。LeetCode 中…

LInux安装MySQL5.7.24详情

安装包下载 MySQL 的官网下载地址&#xff1a;http://www.mysql.com/downloads/ 我安装的是5.7版本 第二步&#xff1a; 选择&#xff1a;TAR (mysql-5.7.24-el7-x86_64.tar) 点击下载 然后点击 No thanks, just start my download. 进行下载。 检查是否安装过mysql [rootmas…

正确设置JUnit测试名称

寻找好名字是手工软件的挑战之一。 您需要随时随地找到它们-类&#xff0c;方法&#xff0c;变量&#xff0c;仅举几例。 但是&#xff0c;什么使名字成为好名字呢&#xff1f; 引用Oncle Bob的话&#xff1a;“三件事&#xff1a;可读性&#xff0c;可读性和可读性&#xff01…

html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性

什么是 HTML5HTML的发展历程如下&#xff1a;产生于1990年1997年 HTML4 出现&#xff0c;成为互联网开发的标准2008年&#xff0c;HTML5正式出现&#xff0c;2002年趋于稳定HTML在发展过程中&#xff0c;HTML4.01 版本维持了长达十年的时间&#xff0c;之后 HTML5 标准才出现&a…

How to show out three rows from the same databand On A4?

How to show out three rows from the same databand On A4? QuotePost by DoraHuang Tue Mar 13, 2018 4:13 am Hello, there are few questions to ask,1. How to present a report from one DataBand to show out three info?My questions like the picture:it is A4 pag…

rds基于什么开发_IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了...

导读&#xff1a;本文将详细科普云计算的概念、云服务的发展现状&#xff0c;并逐一介绍各种云服务模式&#xff08;IaaS、PaaS、SaaS、DaaS&#xff09;&#xff0c;建议收藏&#xff01;01 云计算的概念云是一种服务&#xff0c;可以像使用水、电、煤那样按需使用、灵活付费&…

[转]css实现左侧宽度自适应,右侧固定宽度

原文地址:https://segmentfault.com/a/1190000008411418 页面布局中经常用会遇到左侧宽度自适应&#xff0c;右侧固定宽度&#xff0c;或者左侧宽度固定&#xff0c;右侧自适应。总之就是一边固定宽度&#xff0c;一边自适应宽度。 一般固定宽度是导航栏&#xff0c;自适应宽度…

Java 8发布了! — Lambdas教程

为了庆祝几分钟前发布的Java 8的发布&#xff0c;我正在发布Java 8 Lambdas教程的草稿版本。 这是学习Streams API的一种很好的可视化方法&#xff0c;从第一天开始&#xff0c;它将帮助您开始在自己的应用程序中利用lambda。本文计划在下一期Java Magazine发行中发表&#xff…

redis 学习(18)-- AOF

redis -- AOF 什么是 AOF 通过日志方式将redis中的写命令进行日志记录&#xff0c;保存在硬盘文件中。 日志记录的实质是将写命令写在硬盘的缓冲区中&#xff0c;再根据相关策略把数据刷新到磁盘中。 当redis服务器启动时候&#xff0c;执行硬盘中的日志文件以恢复redis中的数据…

重启IIS和SqlServer的命令行

在WEB开发中经常需要重启IIS,每次打开IIS来操作很麻烦&#xff0c;所以我干脆就在桌面新增了一个CMD文件&#xff0c;内容如下&#xff1a;&#xff08;SQL Server占的内存不少&#xff09;net stop iisadmin /ynet start w3svc net stop mssqlservernet start mssqlserver每次…

精简SWT FormLayout的用法

出于对效率的追求&#xff0c;我最近重新考虑了SWT FormLayout的可用性。 尽管就灵活性而言&#xff0c;它是我最喜欢的核心布局之一&#xff0c;但我不得不认识到&#xff0c;大多数同事都不情愿地使用它。 考虑到面部反应&#xff0c;建议将其建议用于适当的任务有时实际上会…

vue 启动时卡死_十分钟浅入Vue 原理

vue原理引用众所周知vue是一个MVVM 渐进式框架&#xff0c;MVVM是vue的设计模式&#xff0c;在vue框架中数据会自动驱动视图。1、MVVM设计模式 ​ 解释View是视图&#xff0c;就是DOM&#xff1b;对应视图也就是HTML部分--代表UI组件&#xff0c;它负责将数据模型转化成UI展现出…

centos7.3 安装 mysql-5.7.13

系统环境: [rootlocalhost ~]# cat /etc/RedHat-release CentOS release 6.7 (Final)[rootlocalhost tools]# uname -aLinux localhost 2.6.32-573.22.1.el6.x86_64 #1 SMP Wed Mar 23 03:35:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux[rootlocalhost tools]# 软件准备:[root…

GARFIELD@12-20-2004

克已复礼为仁转载于:https://www.cnblogs.com/rexhost/archive/2004/12/20/79502.html

Java 8的功能基础

Java 8彻底改变了Java。 它很可能是过去10年中最重要的Java版本。 有很多新功能&#xff0c;包括默认方法&#xff0c;方法和构造函数引用以及lambda&#xff0c; 仅举几例 。 更有趣的功能之一是新的java.util.stream API&#xff0c;正如Javadoc所述&#xff0c;该API支持 …

JSON.stringify()和JOSN.parse()

JSON.stringify()跟JSON.parse() 终于把这两个方法搞清楚了&#xff01;&#xff01;&#xff01; JSON.tringify()&#xff1a;把一个json数据转化成JSON string JSON.stringify({uno:1,dos:2},null,\t)"{"uno": 1,"dos": 2}"JSON.stringfy({u…

查表法实现反正切_关于python实现CRC32的应用和总结

关于python实现CRC32的应用和总结目前使用的Crc计算包含Crc32和Crc32mpeg2两种计算方式。循环冗余检验 CRC 差错检测技术能够证明数据是完整的&#xff0c;是无差错的&#xff08;只是非常近似的认为是无差错的&#xff09;。保证数据可靠性传输的方法包含如下&#xff1a;检验…