fragment切换

Android Jetpack-Navigation

ⅰ亾dé卋堺 提交于 2020-02-09 14:23:30
Android Jetpack-Navigation(一) 1. 简介 Navigation是一个可简化Android导航的库和插件。 Navigation是用来管理Fragment的切换,并且可以通过可视化的方式,看见App的交互流程。 2. 优点 处理Fragment的切换 默认情况下正确处理Fragment的前进和后退 为过渡和动画提供标准化的资源 实现和处理深层连接 可以绑定 Toolbar,BottomNavigationView和ActionBar ViewModel支持 3. 准备 AndroidStudio 3.2或更高 4. Navigation三要素 名词 解释 NavigationGraph 这是一个新的资源文件,用户在可视化界面可以看出它能够到达的Destination(用户能够到达的屏幕界面),以及流程关系 NavHostFragment 当前fragment的容器 NavController 导航的控制者 5. 使用 1. 添加依赖 implementation group: 'androidx.navigation', name: 'navigation-fragment', version: '2.2.0' implementation group: 'androidx.navigation', name: 'navigation-ui',

使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab

て烟熏妆下的殇ゞ 提交于 2020-02-03 19:37:01
版权声明:本文为 HaiyuKing 原创文章,转载请注明出处! 前言 使用FragmentTabHost实现底部选项卡效果。 备注:该Demo主要是演示FragmentTabHost的一些设置和部分功能,实际中需要参考其他Demo。 效果图 代码分析 1、该Demo中采用的是FragmentTabHost的布局方案之一 【命名为非常规布局写法】;【 建议使用常规布局写法 ,见《 FragmentTabHostTopDemo【FragmentTabHost固定宽度且居中】 》】 2、未使用自定义的FragmentTabHost; 【建议使用自定义的FragmentTabHost,见《FragmentTabHostUnderLineDemo【 FragmentTabHost带下划线 】》】 原因是FragmentTabHost切换时执行的是attach/detach,而不是show/hide。而atach触发的执行顺序:attach()->onCreateView()->onActivityCreated()->onStart()->onResume() 使用hide()方法只是隐藏了fragment的view并没有将view从viewtree中删除,随后可用show()方法将view设置为显示。 3、ContactFragment演示的是:使用FragmentTabHost时

Android Jetpack系列——ViewModel源码分析

人走茶凉 提交于 2020-01-28 21:10:24
本文章已授权微信公众号郭霖(guolin_blog)转载。 本文章主要是对 ViewModel 进行源码分析,建议对着 示例代码 阅读文章, 示例代码 如下: ViewModelDemo 本文章使用的是 Android SDK 29 的源码分析。 定义 Android框架管理 UI控制器的生命周期 (例如: Activity 和 Fragment ), Framework 可能决定 销毁 或者 重新创建一个UI控制器 ,以响应某些用户操作或者设备事件,这些操作或者事件完全超出你的控制。 如果系统 销毁 或者 重新创建一个UI控制器 ,那么你存储在其中的任何 与UI相关的临时数据 都 丢失 ,例如:你的应用程序在某个 Activity 中包含一个用户列表,当 配置信息 更改重新创建 Activity 时,新的 Activity 必须重新获取用户列表。对于简单数据, Activity 可以使用 onSaveInstanceState() 方法,并且在 onCreate() 方法中从 Bundle 中恢复数据,但是这种方法只适用于 少量的、可以序列化和反序列化的数据 ,而不是 潜在的大量数据的用户列表 或者是 很多的Bitmap 。 另外一个问题是 UI控制器 经常需要进行 异步调用 ,这可能需要一些时间才能返回, UI控制器 需要管理这些调用,并确保系统在 销毁 后对其进行清理,以避免

Android - Android 面试题集 -- Android 部分答案

萝らか妹 提交于 2020-01-24 05:19:22
2.1 Activity 1.Activity是什么? Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。 当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。 2.典型情况下的Activity生命周期? Activity启动–>onCreate()–>onStart()–>onResume() 点击home键回到桌面–>onPause()–>onStop() 再次回到原Activity时–>onRestart()–>onStart()–>onResume() 退出当前Activity时–>onPause()–>onStop()–>onDestroy() 3.异常情况下的Activity的生命周期 & 数据如何保存和恢复? 在onStop之前调用onSaveInstanceState保存当前Activity状态,当Activity被重新创建后,系统调用 onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象 作为参数传递给onRestoreInstanceState和onCreate方法 onRestoreInstanceState的调用时机发生在onStart之后

Android 代码优化点滴

天大地大妈咪最大 提交于 2020-01-23 02:13:01
MVC 模型:Mode,View,Controller与view相关的类:DragLayer (自定义的帧布局DragLayer 包含hotseat ,workspace ,和DragController , DragListener 等一起使得桌面上的shortcut具备拖动功能,和DropTarget一起具备删除功能 桌面拖动,删除的处理:将workspace 和DragLayer通过一些接口:DropTarget, DragSource, DragScroller配套完成,DragLayer 和DragController 操纵以上接口类,在workspace 去实现具体)àworkspace(自定义的类似pageview,自己可以snapToPage,即可在不同的cellLayout之间切换,同时实现拖动,触摸等接口,做具体的动作)à cellLayout(默认一个workspace 包含两个cellLayout,可以增加,删除 )à ShortcutAndWidgetContainer(在cellLayout 中,真正是它来确定桌面上的Shortcut 的位置,大小等)à (ShortcutInfo,FolderInfo) 与Mode 相关的类:LauncherProvider 提供和数据库直接操作相关的接口,LauncherModel 非UI线程(后台线程

android Loader机制

早过忘川 提交于 2020-01-19 08:36:05
Activity和Fragment管理LoaderManager,LoaderManager管理Loader,Loader得到数据后触发在LoaderManager中实现的Loader的callback接口,LoaderManager在接收到Loader的callback回传调运时触发我们Activity或Fragment中实现的LoaderManager回调callback接口,就这样就实现了Loader的所有功能,而我们平时写代码一般只用关心LoaderManager的callback实现即可;对于自定义Loader可能还需要关心AsyncTaskLoader子类的实现。 提供异步加载数据机制; 对数据源变化进行监听,实时更新数据; 在Activity配置发生变化(如横竖屏切换)时不用重复加载数据; 适用于任何Activity和Fragment; 深入了解机制 https://blog.csdn.net/zwlove5280/article/details/79109091 来源: https://www.cnblogs.com/l-h-h/p/10351997.html

Chapter4:与Fragment交互

做~自己de王妃 提交于 2020-01-16 20:51:42
Chapter4:与Fragment交互 文章目录 Chapter4:与Fragment交互 4.1 屏幕界面管理 4.2 动态管理Fragment 4.2.1 事务变更的延迟执行 4.2.2 添加和删除Fragment 4.2.3 返回键的支持 4.3 创建一个自适应的应用布局 4.3.1 更新布局资源文件使其支持动态Fragments 4.3.2 适配差异的设备 4.3.3 动态载入Fragment 4.3.4 消除冗余的处理 4.3.5 管理异步的创建过程 4.3.6 合并更改 4.4 参考资料 4.1 屏幕界面管理 到现在为止,我们认为在我们的app中每个Activity都关联一个屏幕界面(screen),而Fragment则是关联一个屏幕界面中的一部分。举例而言,我们之前创建的书目浏览的例子中,当屏幕界面为横向时(wide-display),我们的app显示的是一个包含两个Fragment的Activity,一个Fragment显示书目标题,另一个Fragment显示被选中书目的内容描述。我们通过一个Activity管理和展示两个Fragment,使它们同时显示在一个屏幕界面上。当手机朝向切换为竖直时,书目标题和被选中书目的内容描述被分到两个屏幕界面显示,这时我们通过两个Activity分别管理这两个不同时显示在同一屏幕界面的两个Fragment。

Android -- Activity和Fragment

こ雲淡風輕ζ 提交于 2020-01-08 11:57:32
⒈简介   我们在App上看到的每一个界面它就需要一个Activity,但Activity并不等同于界面,只是界面需要Activity。   Fragment是碎片化的界面,每一个Activity可以包含很多个Fragment,Fragment不可以作为独立存在的,它必须依赖于Activity,它是受Activity管理的。 ⒉Activity的创建三部曲   1.新建类继承Activity或其子类 package cn.coreqi.activity; import androidx.appcompat.app.AppCompatActivity; public class TestActivity extends AppCompatActivity { }   2.在AndroidManifest中声明 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.coreqi.helloworld2"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string

面试常问知识点,Fragment+Activity+service等等

白昼怎懂夜的黑 提交于 2019-12-31 00:03:17
每一次去面试就是一次对自我知识的总结和审核,如果你想拿到大厂的offer.成功的通过一面二面三面四面,那么我分享的面试学习路线你可以来参考一下(PDF文档版见如下) 那么面试中最常问的小知识点不懂的透彻怕是不行了 ( 顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS 1 、四大组件是什么 1)Activity: 用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。一个 Activity通常是一个单独的屏幕,Activity通过Intent来进行通信。Android中会维持一个Activity Stack,当一个新 Activity 创建时,它就会放到栈顶,这个 Activity 就处于运行状态。 2)Service: 服务,运行在手机后台,适合执行不需和用户交互且还需长期运行的任务。 3)ContentProvider: 内容提供者,使一个应用程序的指定数据集提供给其他应用程序,其他应用可通过 ContentResolver 类从该内容提供者中获取或存入数据。它提供了一种跨进程数据共享的方式,当数据被修改后, ContentResolver 接口的 notifyChange 函数通知那些注册监控特定 URI 的 ContentObserver 对象。 如 果

让多个Fragment 切换时不重新实例化

末鹿安然 提交于 2019-12-24 21:02:20
在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment: 1 2 3 4 5 6 7 8 9 public void switchContent(Fragment fragment) { if(mContent != fragment) { mContent = fragment; mFragmentMan.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, R.anim.slide_out) .replace(R.id.content_frame, fragment) // 替换Fragment,实现切换 .commit(); } } 但是,这样会有一个问题: 每次切换的时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户的数据流量。 就想,如何让多个Fragment彼此切换时不重新实例化? 翻看了Android官方Doc,和一些组件的源代码,发现,replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。 正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。 这样就能做到多个Fragment切换不重新实例化: 1 2 3 4 5 6