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 - 全部存在,所以不太适合加载 大量的数据 如图片什么的,很容易内存溢出。
工程结构:
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实现滑动切换效果...相关推荐
- Android实现一个简易的新闻列表APP(TabLayout+ViewPager+Fragment)
Android实现一个简易的新闻列表APP(TabLayout+ViewPager+Fragment) 文章目录 Android实现一个简易的新闻列表APP(TabLayout+ViewPager+F ...
- Android Studio 实现将视频资源嵌入APP中
Android Studio 实现将视频资源嵌入APP中 (直取思路跟代码跳转文末,如有帮助勿忘分享点赞奥!你的支持是我更新的动力!) 在正文之前首先想给大家引入安卓数据存储路径: 内部存储inter ...
- android 卡片滑动详情页,在Mugeda中制作顺畅的左右滑动切换卡片效果的教程
之前在做<刁角武汉>的时候对如何选择景点这个问题做了好几个方案,一个是画一张大地图,另一个是做垂直的列表选择,但我还是选择了左右滑动来切换景点.因为在多次尝试之后发现发现在手机屏上似乎不适 ...
- android原生界面太烦了,Android进阶(二十七)Android原生扰人烦的布局
Android原生扰人烦的布局 在开发Android应用时,UI布局是一件令人烦恼的事情.下面主要讲解一下Android中的界面布局. 一.线性布局(LinearLayout) 线性布局分为: (1) ...
- android读取带公章的pdf文件,APP中如何显示带电子签名的PDF文件
之前碰到一个需求,需要在手机 APP 中显示 pdf 文件.经过调研发现,在电脑上的浏览器如 chrome.safari等,可以直接显示 pdf 文件.由此联想到,在 APP 中能否通过浏览器来加载显 ...
- android聊天界面与功能,【android】聊天界面的制作-简易版实现
看完了第一行代码第三章,改进了一些基本功能,下面就听小弟一一道来: 也参考了很多别人的代码,但是总觉得一些功能可以比较轻松的实现就不绕那么多弯子,就用最基础的码代码实现一样的功能:(1)整体布局代码一 ...
- android 通讯录界面设计带字母,android仿微信联系人索引列表功能
前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果.本来没打算自己去写,想要第三方写好的东西,搜了几个之后发现有的太复杂 ...
- android dlna uri,DLNA 在自己的APP 中添加投屏功能
功能:让本机的视频在其他设备上播放. demo 学习中 关键词: cling demo from: DROID DLNA 关于投屏的原理,协议相关的知识已经在上一篇中说明. 关于设备搜索,查找等不在此 ...
- Android viewpager+fragment实现无限滚动,左右有前/后一页的部分,并fragment显示的内容是activity传过去的数据
背景:最近在做app的时候碰到一个这样的需求.1,将从网络上获取的json数组数据显示出来,每页显示一个数据源,并且可以左右翻页查看:2,中间显示一个完整页,两边分别还有上下一页的一点,:3,可无限循 ...
最新文章
- T-SQL Cstr函数
- php auth_http,php auth_http类库进行身份效验
- springboot使用jdbc连接mysql数据库
- 副族元素从上到下原子半径_长知识:化学元素大阅兵
- 【Windows系统】-- 远程桌面时,WIN键被锁定
- 关店9000家,市值蒸发90%,女装巨头大崩溃的根源找到了
- python学习(day1)初识入门
- RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
- Git 和 SVN之间的五个基本区别
- 微软Media Creation Tool 创建工具 1.3 升级:支持全新下载安装Win11 22H2 Build 22621.525
- 让犀牛基于点云数据来完成逆向建模
- 神推荐:酷站导航你值得拥有
- 为什么要学习Linux内核,如何学习?
- CTF-PWN学习-为缺少指导的同学而生
- bash文件无法运行,提示没有那个文件或目录的解决方法
- docker(一) 安装与创建容器
- 实现八大行星绕太阳3D旋转效果,这波操作不来喊个666?
- 怎么把文件上传到java se_java se模仿http向web服务器上传文件
- jenkins linux 发邮件,Jenkins构建后发送邮件
- 《Head First jQuery》读书笔记
热门文章
- android实时声音信号波形_Android输出正弦波音频信号(左右声道对称)-阿里云开发者社区...
- CRC校验算法的解析,暨对网上的CRC详解的补充
- 老罗android oat,入门ART虚拟机(5)——OAT文件
- java监控rabbitMq服务状态,SpringCloud-Turbine【RabbitMQ服务监控】
- java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制
- 龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...
- 幼儿课外活动游戏_幼儿园户外游戏活动大全
- mysql grep 提取错误日志_详解grep获取MySQL错误日志信息的方法
- 程序员外包避坑指南?
- CMD启动mysql服务“发生系统错误 5”的解决办法