ViewPage配合FragmentPagerAdapter

2023-10-30

http://blog.sina.com.cn/s/blog_881875e70101m648.html

 先说一段题外话。我们在进行android开发的时候发现,activity是与界面相关的,view及其派生类也是与界面相关的,fragment也是与界面相关的,那他们直接的联系和区别在哪呢。我们知道activity并不直接生成界面,他与view及其派生类关联才能产生界面,acitivity有自己的生命周期,掌管着界面从创建到消亡的过程,用户对应用程序的操作(比如按键,触屏)都要通过acitivity来分发和处理,activity建立view与监听器及之间的关联,从activity的这些作用来看与mvc架构中的c(Controller)作用相似,而view及其派生类当然就是mvc架构中的v。

      我们再来看fragment,fragment有自己的生命周期(虽然它的生命周期依赖activity的生命周期),它能够管理属于它自己的view,他有自己的用户交互,这么看它也像是一个mvc中的c,但是它又可以像view一样加入到acitivity的布局中,这又像是一个mvc架构中的v。因此fragment是为了简化actvity与view之间的交互而将activity对用户交互的逻辑模块化进行的封装,它的好处是:1>简化activity的逻辑控制 2>这些模块化的fragment也更利于复用。
      Fragment有如下特点:
1>Fragment表现为一个activity用户界面的一部分
2>一个activity可以有多个fragment
3>可以在多个activity中复用fragment
4>fragment有自己的生命周期
5>fragment有自己的事件处理
6>activity运行中,可以添加,移除一个fragment
7>fragment的生命周期有其宿主activity控制
      回到正题,ViewPager配合FragmentPagerAdapter如何使用,我们通过下面的例子来说明。
界面布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/linear"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >
      <android.support.v4.view.ViewPager
            android:id="@+id/viewpager1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
      </android.support.v4.view.ViewPager>
</LinearLayout>
界面实现:
public class PagerAdapterAndActionBar Activity extends Activity {
ViewPager viewPager;
ActionBar mActionBar;
Fragment1 fragment1;
Fragment2 fragment2;
ArrayList<Fragment> listFragmentsa;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.block_incoming_call_setting);
// 设置viewPager的适配器
listFragmentsa = new ArrayList<Fragment>();
fragment1 = new Fragment1();
fragment2 = new Fragment2();
listFragmentsa.add(fragment1);
listFragmentsa.add(fragment2);
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getFragmentManager(), listFragmentsa);
viewPager = (ViewPager) findViewById(R.id.viewpager1);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.setCurrentItem(0);
// 监听viewPager的变化,ViewPager的变化会同步到ActionBar的tab页
MyOnPageChangeListener myOnPageChangeListener = new MyOnPageChangeListener();
viewPager.setOnPageChangeListener(myOnPageChangeListener);
// 设置ActionBar的tab页,并且ViewPager会随着Tab的选择变化
mActionBar = getActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
MyTabListener myTabListener = new MyTabListener(listFragmentsa);
Tab tab1 = mActionBar.newTab().setText("aaaaaaaa");
Tab tab2 = mActionBar.newTab().setText("bbbbbbbb");
tab1.setTabListener(myTabListener);
tab2.setTabListener(myTabListener);
mActionBar.addTab(tab1);
mActionBar.addTab(tab2);
}
class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> listFragments;
public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> al) {
super(fm);
listFragments = al;
}
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return listFragments.get(position);
}
@Override
public int getCount() {
return listFragments.size();
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}
class MyTabListener implements TabListener {
ArrayList<Fragment> mFragments;
public MyTabListener(ArrayList<Fragment> mFragments) {
super();
this.mFragments = mFragments;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged (int arg0) {
Log.w("xujinqq", "onPageScrollStateChanged ");
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Log.w("xujinqq", "onPageScrolled");
}
@Override
public void onPageSelected(int arg0) {
Log.w("xujinqq", "onPageSelected" + arg0);
// mActionBar.getTabAt(arg0).select();
mActionBar.setSelectedNavigationIte m(arg0);
}
}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ViewPage配合FragmentPagerAdapter 的相关文章

  • [CocosCreator 踩坑记录] 无法保存场景Failed to update asset db

    问题描述 无法保存场景 并出现以下报错 Failed to update asset db assets scences messages Error EISDIR illegal operation on a directory open
  • Vue3描述列表(Descriptions)

    整体功能效果与 ant design vue 保持高度一致 包含两种组件 Descriptions 和 DescriptionsItem 必须搭配使用 效果如下图 在线预览 APIs Descriptions 参数 说明 类型 默认值 必传
  • 解决4G网络移动打不开网站,WiFi可以正常访问

    一 解决4G网络移动打不开网站 WiFi可以打开1 把域名放进http ping chinaz com 看看解析IP延迟是否过高2 询问WiFi能打开网站 4G网络打不开网站的人 是不是本地网络出问题或者只有移动4g 其他运营商是不是都能访
  • esxi 无盘服务器,用ipxe网络启动打造无盘ESXi系统

    一 源码与链接 几个相关链接 相关源码 二 编译一个带 iSCSI 和 COMBOOT 功能的 iPXE 固件 这个参考 ipxe 官网或 iPXE 编译增加功能与自定义脚本 进行编译 在我的源码 netboot tftp 中有编译好可用的
  • MySQL高级篇(逻辑架构、存储引擎、用户与权限管理、索引优化、慢查询日志、主从复制等)

    MySQL高级 1 MySQL逻辑架构 1 1 概览 1 1 1 连接层 1 1 2 服务层 1 1 3 引擎层 1 1 4 存储层 1 2 查看SQL的执行周期 1 3 查询流程 1 4 SQL执行顺序 2 MySQL存储引擎 2 1 查
  • 百分百全开源的ERP项目,太赞了

    大家好 我是小编南风吹 每天推荐一个小工具 源码 装满你的收藏夹 让你轻松节省开发效率 实现不加班不熬夜不掉头发 今天小编推荐一款基于SpringBoot框架和SaaS模式的ERP 目前专注进销存 财务 生产功能 主要模块有零售管理 采购管
  • MySQL的字段属性,以及存储引擎和字符集

    目录 1 字段属性 1 1 zerofill 填充0 1 2 primary key 主键 1 3 auto increment 1 4 not null 1 5 foreign key 外键 1 6 comment 1 7 default
  • 5.类和对象的创建

    文章目录 1 面向过程和面向对象的理解 2 类和对象的理解 3 类和对象的创建 1 面向过程和面向对象的理解 1 二者都是一种思想 面向对象是相对于面向过程而言的 面向过程 强调的是功能行为 以函数为最小单位 考虑怎么做 面向对象 将功能封
  • 用Python手撸一个神经网络

    单隐藏层神经网络的实现 用Python实现用于分类任务的简单神经网络 神经网络简述 编程弯路 从矩阵视角看神经网络 反向传播及其实现 效果测试 用神经网络解决更复杂的分类任务 结语 用Python实现用于分类任务的简单神经网络 一年前接触
  • 分类算法概述

    摘 要 分类是数据挖掘 机器学习和模式识别中一个重要的研究领域 通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较 总结出了各种算法的特性 为使用者选择算法或研究者改进算法提供了依据 1 概述分类是一种重要的数据挖掘技术 分类的目的

随机推荐

  • MIUI解BL锁失败

    最后解决办法是 换USB 2 0接口 分析问题 或许可能是软件兼容性不好 USB3 0影响读取设备信息 导致无法解锁
  • 基于战争策略算法优化的BP神经网络(预测应用) - 附代码

    基于战争策略算法优化的BP神经网络 预测应用 附代码 文章目录 基于战争策略算法优化的BP神经网络 预测应用 附代码 1 数据介绍 2 战争策略优化BP神经网络 2 1 BP神经网络参数设置 2 2 战争策略算法应用 4 测试结果 5 Ma
  • 运算放大器的应用之:T形电阻网络公式的三种推导方法

    上面公式怎么推导 推导1 根据KCL KVL定律 当Vi单独作用时 当VREF单独作用时 根据叠加定理得 推导2 利用戴维宁定理推导 如下图所示 在A B处把电路断开 然后 利用戴维宁定理 得到如下等效电压及等效电阻 把输出电路替换成戴维宁
  • 实现快速排序

    原理 找出一个数字 然后从该数列的右边找一个数比该数字大的第一个数 填入该数的位置中去 然后又从左往右找第一个数大于或等于该数字的数 然后填入上一个数的位置中去 也就是上一次找比该数字大的第一个数的位置中去 直到i和j 相遇就停止循环 再排
  • 追尾事故降发生:超低功耗滴滴桔视ADAS落地实践

    桔妹导读 道路交通事故每年都给人类带来巨大的生命和财产损失 滴滴作为交通领域的深度参与者 不断地探索降低交通事故的方法 本文重点介绍车载视觉团队是如何在滴滴的场景下 在桔视设备上 使用超低功耗的桔视ADAS 高级辅助驾驶系统 技术 降低交通
  • 计算机系统大作业

    摘 要 本文对hello c在Linux下的生命周期进行了分析 通过一些Linux平台的工具 如gcc objdump edb gdb readelf对程序代码的预处理 编译 汇编 链接 反汇编的过程进行了分析 对比 通过hello在she
  • 我曾经喜欢夏天

    我小时候在农村长大 夏末初秋时节 在农村院子里躺在凉席上 听大人讲他们一天的收获和明天的计划 夜风吹来树叶沙沙作响 夜空中繁星点点 偶尔飞过一两只飞鸟 发出清脆的声音 那些夜里 我要么抱着一个井里冰镇过的大西瓜 大块朵颐 要么啃着一根自家地
  • Linux yum提示Loaded plugins 错误的解决办法

    在Linux中使用yum时出现错误信息 Loaded plugins fastestmirror langpacks Existing lock var run yum pid another copy is running as pid
  • GPT3动口,RT-1动手,智能机器人开卷; 代码开源!

    机器学习 ML 研究的多个子领域 例如计算机视觉和自然语言处理 的最新重大进展是通过一种共享的通用方法实现的 该方法利用大型 多样化的数据集和能够有效吸收所有数据的表达模型 尽管已经有各种尝试将这种方法应于机器人技术 但机器人尚未利用高性能
  • 数图互通高校学生宿舍管理中会细分为哪些模块?

    数图互通学生宿舍管理系统 功能模块包括 基础数据 在线选宿舍 学生入住 宿舍调整 学生退宿 学生社区评定 外来人员来访管理 物品出楼登记 归寝管理 异性来访登记 宿舍维修管理 宿舍收费管理 辅导员管理 综合查询 统计报表
  • 24_Pandas.DataFrame,Series元素值的替换(replace)

    24 Pandas DataFrame Series元素值的替换 replace 要替换pandas DataFrame pandas Series元素的值 请使用replace 方法 这里 将描述以下内容 替换元素 一次替换多个不同的元素
  • tar: /usr/app: Not found in archive

    用tar解压文件报错 tar usr app Not found in archive 解决办法 加上 C就行 例如 tar zxvf zookeeper 3 4 10 tar gz C usr app
  • 细数华人那些代工企业

    原文地址 http www shudoo com news index php ac va aid 4438 一个不缺少人的社会 一个劳动密集型社会 廉价的社会劳动力让中国成为了世界的代工工厂 为客户提供低成本的代工服务 这其中有我们熟悉的
  • 19 【flex布局】

    34 移动Web开发之flex布局 34 1 flex布局体验 34 1 1 传统布局与flex布局 传统布局 兼容性好 布局繁琐 局限性 不能在移动端很好的布局 flex布局 操作方便 布局极为简单 移动端应用很广泛 PC 端浏览器支持情
  • iframe父子窗口通信(免跨域)(最下面附带封装好的)

    子窗口对父窗口发出消息 window parent postMessage type 自定义事件名 自定义事件名 value JSON stringify ObjData 数据 只能是字符串 父窗口接受消息 window addEventL
  • 关于QSqlDatabase::addDatabase的一个运行时错误

    这是一个在开发过程中不会出现的问题 但是当你发布程序后 将程序安装在别的机器 在运行时会出现的错误 错误如下 QSqlDatabase QSQLITE driver not loaded QSqlDatabase available dri
  • linux apache 403 forbidden,apache服务器显示403 Forbidden的原因和解决方法

    HTTP 错误 403 禁止访问 即403 Forbidden You don t have permission to access on this server 可能是权限不足引起的问题 解决方法 打开apache的配置文件httpd
  • 区块链如何应用于边缘计算、隐私计算联邦学习

    近年来数据安全事件频发 数据安全威胁日益严峻 随着 中华人民共和国数据安全法 的颁布和实施 对企业合规安全地发挥数据价值提出了更高的要求 如何在保障数据安全的前提下发挥数据价值 平衡效率和风险 是当前面临的重要课题 本文探讨如何将区块链应用
  • kafka扩容数据自动重分配脚本

    本文章记录使用kafka reassign partitions sh脚本来重新分配节点分区 kafka节点扩容后 已经存在的旧的topic的分区是不会伴随节点的增加而变动的 所以需要我们手动的去调整分区 下面提供了一套脚本 可以实现自动化
  • ViewPage配合FragmentPagerAdapter

    http blog sina com cn s blog 881875e70101m648 html 先说一段题外话 我们在进行android开发的时候发现 activity是与界面相关的 view及其派生类也是与界面相关的 fragmen