在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 - 全部存在,所以不太适合加载 大量的数据 如图片什么的,很容易内存溢出。

工程结构:

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:

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

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

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

  1. Android实现一个简易的新闻列表APP(TabLayout+ViewPager+Fragment)

    Android实现一个简易的新闻列表APP(TabLayout+ViewPager+Fragment) 文章目录 Android实现一个简易的新闻列表APP(TabLayout+ViewPager+F ...

  2. Android Studio 实现将视频资源嵌入APP中

    Android Studio 实现将视频资源嵌入APP中 (直取思路跟代码跳转文末,如有帮助勿忘分享点赞奥!你的支持是我更新的动力!) 在正文之前首先想给大家引入安卓数据存储路径: 内部存储inter ...

  3. android 卡片滑动详情页,在Mugeda中制作顺畅的左右滑动切换卡片效果的教程

    之前在做<刁角武汉>的时候对如何选择景点这个问题做了好几个方案,一个是画一张大地图,另一个是做垂直的列表选择,但我还是选择了左右滑动来切换景点.因为在多次尝试之后发现发现在手机屏上似乎不适 ...

  4. android原生界面太烦了,Android进阶(二十七)Android原生扰人烦的布局

    Android原生扰人烦的布局 在开发Android应用时,UI布局是一件令人烦恼的事情.下面主要讲解一下Android中的界面布局. 一.线性布局(LinearLayout) 线性布局分为: (1) ...

  5. android读取带公章的pdf文件,APP中如何显示带电子签名的PDF文件

    之前碰到一个需求,需要在手机 APP 中显示 pdf 文件.经过调研发现,在电脑上的浏览器如 chrome.safari等,可以直接显示 pdf 文件.由此联想到,在 APP 中能否通过浏览器来加载显 ...

  6. android聊天界面与功能,【android】聊天界面的制作-简易版实现

    看完了第一行代码第三章,改进了一些基本功能,下面就听小弟一一道来: 也参考了很多别人的代码,但是总觉得一些功能可以比较轻松的实现就不绕那么多弯子,就用最基础的码代码实现一样的功能:(1)整体布局代码一 ...

  7. android 通讯录界面设计带字母,android仿微信联系人索引列表功能

    前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果.本来没打算自己去写,想要第三方写好的东西,搜了几个之后发现有的太复杂 ...

  8. android dlna uri,DLNA 在自己的APP 中添加投屏功能

    功能:让本机的视频在其他设备上播放. demo 学习中 关键词: cling demo from: DROID DLNA 关于投屏的原理,协议相关的知识已经在上一篇中说明. 关于设备搜索,查找等不在此 ...

  9. Android viewpager+fragment实现无限滚动,左右有前/后一页的部分,并fragment显示的内容是activity传过去的数据

    背景:最近在做app的时候碰到一个这样的需求.1,将从网络上获取的json数组数据显示出来,每页显示一个数据源,并且可以左右翻页查看:2,中间显示一个完整页,两边分别还有上下一页的一点,:3,可无限循 ...

最新文章

  1. T-SQL Cstr函数
  2. php auth_http,php auth_http类库进行身份效验
  3. springboot使用jdbc连接mysql数据库
  4. 副族元素从上到下原子半径_长知识:化学元素大阅兵
  5. 【Windows系统】-- 远程桌面时,WIN键被锁定
  6. 关店9000家,市值蒸发90%,女装巨头大崩溃的根源找到了
  7. python学习(day1)初识入门
  8. RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
  9. Git 和 SVN之间的五个基本区别
  10. 微软Media Creation Tool 创建工具 1.3 升级:支持全新下载安装Win11 22H2 Build 22621.525
  11. 让犀牛基于点云数据来完成逆向建模
  12. 神推荐:酷站导航你值得拥有
  13. 为什么要学习Linux内核,如何学习?
  14. CTF-PWN学习-为缺少指导的同学而生
  15. bash文件无法运行,提示没有那个文件或目录的解决方法
  16. docker(一) 安装与创建容器
  17. 实现八大行星绕太阳3D旋转效果,这波操作不来喊个666?
  18. 怎么把文件上传到java se_java se模仿http向web服务器上传文件
  19. jenkins linux 发邮件,Jenkins构建后发送邮件
  20. 《Head First jQuery》读书笔记

热门文章

  1. android实时声音信号波形_Android输出正弦波音频信号(左右声道对称)-阿里云开发者社区...
  2. CRC校验算法的解析,暨对网上的CRC详解的补充
  3. 老罗android oat,入门ART虚拟机(5)——OAT文件
  4. java监控rabbitMq服务状态,SpringCloud-Turbine【RabbitMQ服务监控】
  5. java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制
  6. 龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...
  7. 幼儿课外活动游戏_幼儿园户外游戏活动大全
  8. mysql grep 提取错误日志_详解grep获取MySQL错误日志信息的方法
  9. 程序员外包避坑指南?
  10. CMD启动mysql服务“发生系统错误 5”的解决办法