a. binding绑定fragment
1.绑定类型举例: 对于PinLoginFragment,系统自动生成FragmentPinLoginBinding
2.解析布局时,直接使用layoutInflater解析器,一般将onCreateView()里面的container传进去,记得最后false
3.返回需要View? 类型,所以return binding.root
4.通过binding.控件id ->使用解析xml的所有控件
b. fragment之间数据传递
1.条件:在同一个activity的fragmentContainer里面
2.创建管理共享数据的类
3.在需要保存跨fragment数据的类里面创建 “管理共享数据类的对象【比如叫viewModel】”,并加上扩展函数 by activityViewModels()
4.在共享数据类中初始化变量,= MutableLiveData(带保存Value的类型)
5.通过变量名.postValue()可以随时改变其值,【注意:在管理共享变量类外,需要先找到它的实例化对象】
6.在fragment中,利用viewModel.共享数据类里定义的变量.observe(viewLifeCircleOwner){ }实现数据的监听与传递
c.高阶函数回调
1.将callback:(String)->Unit当作参数写入方法【例如方法名叫addTrack】,
2.调用addTrack时,不必传String的值,应该写callback方法的具体内容
3.调用callback变量时,传callback里需要传的参数的具体值
d.控件动画效果
1.调用ObejectAnimator.ofFloat()方法,里面传值,再通过apply设置duration,repeatCount,repeatMode属性,最后记得调用start()开启这个动画效果
2.在ofFloat()里面,可以传(View,"改变的属性名【系统定义好的】",属性值变动范围)
e.在类的主构造函数
1.(val或var 属性:类型)能接受外部调用时的值,也能在类里面当属性使用,但一个方法fun login()里的变量,就只能被调用时接收值
2.主构造函数或方法()里的值可以初始化一个默认值,方法被调用时,可以不必为有默认值的参数 传值
f.储存属性
1.color 找到value -> color
2.string value -> string
3.styles value->创建styles的Vaule Resource File
将几个属性保存在一起,调用时,几个已设置好的属性可以同时设置
调用方法:在一个view的xml里style = 找到对应的style name
g.自定义属性
1.创建:value里建attrs文件,写自定义控件的自定义属diy性 -》属性名 +属性类别
2。使用:在init{}里找到context,调用其obtainStyledAttributes(attrs,R.styleable.命名).apply{}方法,用变量储存 this.getColor等方法,找到对应自定义属性,和设置的颜色
h.申请App跳转权限
1. AndroidManifest.xml文件里使用<user-permissions name = 电话,相机,相册,联系人列表,使用网络对该指定功能注册
2.检测权限 int result 记录checkSelfPermission(Manifest.permission.申请名称)的返回值,返回值为PackageManager.Permission_DENIED或PackageManager.Permission_GRANTED
3.判断result为PackageManager.Permission_DENIED后
调用registerForActivityResult(ActivityResult.RequestPermission()){ }申请权限