无题
Fragment回退栈1111111111111
无题
Fragment基本使用Fragment的使用有两种方式,分别是静态加载和动态加载。
静态加载使用fragment关于静态加载的流程如下:
定义Fragment的xml布局文件
自定义Fragment类,继承Fragment类或其子类,同时实现onCreate()方法,在方法中,通过inflater.inflate加载布局文件,接着返回其View
在需要加载Fragment的Activity对应布局文件中的name属性设为全限定类名,即包名.fragment
最后在Activity调用setContentView()加载布局文件即可
注意点:
静态加载一旦添加就不能在运行中删除。
静态fragment 在哪儿初始化?。
fragment一定是没有参数的构造函数。
不能嵌套使用fragment。
动态加载使用fragment动态加载fragment的流程如下:
通过getSupportFragmentManager()方法,获得FragmentManager对象。
调用FragmentManager对象的beginTransaction()方法,如fm.beginTransac ...
无题
Fragment的切换方式Fragment 的切换方式分为
add()&remove()
hide()&show()
detach()&attach()
也许你会问不是还有 replace()方法吗?其实 replace()其实是先调用了 remove()然后再调用add()方法,所以不算那三种其实之一。那么这三种方式有什么区别呢?add()&remove()就是添加和移除,因此 replace()这个方法只是在上一个 Fragment 不再需要时采用的简便方法。而hide()&show()则是指隐藏和显示,这种方式防止 Fragment 多次创建实例对象,所以正确的切换方式是 add(),切换时 hide(),add()另一个 Fragment;再次切换时,只需 hide()当前,show()另一个,这样就能做到多个 Fragment 切换不重新实例化。那么 detach()&attach()呢?使用 detach()会将 view 从 ViewTree 中删除,和 remove()不同,此时 Fragment 的状态依然保持着,在 ...
无题
Fragment的坑
重叠;
注解 newAPI(兼容包解决);
Setarguement()初始化数据;
不 能在 onsave…()方法后,commit;
入栈出栈问题; –事务。像 Activity 跳转 一样的效果,同时返回的时候还能回到之前的页面(fragment)并且状态都还在。 replace(f1,f2)严重影响生命周期:add()+show+hide。
无题
Fragment的扩展子类
对话框:DialogFragment
列表:ListFragment
选项设置:PreferenceFragment
WebView界面:WebViewFragment
无题
Dagger2-一个更为精简的定义:当类型不足以鉴别一个依赖的时候,我们就可以使用这个注解标示;
@Scope:@Scope同样用于自定义注解,我能可以通过@Scope自定义的注解来限定注解作用域,实现局部的单例;
@Singleton:@Singleton其实就是一个通过@Scope定义的注解,我们一般通过它来实现全局单例。但实际上它并不能提前全局单例,是否能提供全局单例还要取决于对应的Component是否为一个全局对象。
我们提到@Inject和@Module都可以提供依赖,那如果我们即在构造函数上通过标记@Inject提供依赖,有通过@Module提供依赖Dagger2会如何选择呢?具体规则如下:
步骤1:首先查找@Module标注的类中是否存在提供依赖的方法。
步骤2:若存在提供依赖的方法,查看该方法是否存在参数。
a:若存在参数,则按从步骤1开始依次初始化每个参数;
b:若不存在,则直接初始化该类实例,完成一次依赖注入。
步骤3:若不存在提供依赖的方法,则查找@Inject标注的构造函数,看构造函数是否存在参数。
a:若存在参数,则从步骤1开始依次初始化每一个参数 ...
无题
DaggerAndroid
无题
AMS
无题
Hilt注入框架.md特点Hilt就是Android团队联系了Dagger2团队,一起开发出来的一个专门面向Android的依赖注入框架。
相比于Dagger2,Hilt最明显的特征就是:
简单。
提供了Android专属的API。
Hilt做的优化包括:
无需编写大量的Component代码
Scope也会与Component自动绑定
预定义绑定,例如 Application与Activity
预定义的限定符,例如@ApplicationContext与@ActivityContext
基本配置1classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
123456apply plugin: 'dagger.hilt.android.plugin'//hilt implementation "com.google.dagger:hilt-android:2.28-alpha" annotationProcessor &quo ...
无题
Hilt网络隔离层设计