Fragment基类
Fragment用法基本与Activity保持一致。如果你掌握了Activity基类的用法,那么GlassBaseFragment
的用法将符合你的开发者直觉。
快速使用
创建一个新的Fragment
继承自GlassBaseFragment
,其中GlassBaseFragment
继承时需要传入当前Fragment
的DataBinding
泛型类型和ViewModel
类型,这样GlassBaseFragment
的子类实例化时会根据类型信息通过反射自动创建DataBinding
和ViewModel
实例。以下是一个简易的代码示例。
class MainActivity : GlassBaseFragment<FragmentTestBinding, EmptyViewModel>() {
override fun initData() {
}
override fun initData() {
}
override fun initView() {
// v为FragmentTestBinding:ViewDataBinding的实例
v.btnConfirm.setInstruct(InstructSingle("que ding", "确定", "confirm"))
v.btnConfirm.setOnClickListener {
toast("confirm")
}
v.btnConfirm.focus()
}
override fun registerObserve() {
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.mst.basics.slide.widget.v2.GlassButton
android:id="@+id/btn_confirm"
app:sign="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
GlassBaseFragment基类结构
GlassBaseFragment
继承自BaseFragment
。它的主要结构如下:
GlassBaseFragment
│
├── Methods
│ ├── onCreate(): Unit
│ ├── onResume(): Unit
│ └── onDestroy(): Unit
│
└── Parent
└── BaseFragment
└── androidx.fragment.app.Fragment
下面是每个部分的功能描述:
Methods: 类的方法,包括设生命周期事件处理(如
onResume
、onPause
、onDestroy
)等。最终父类为
androidx.fragment.app.Fragment
获取当前的DataBinding实例
在GlassBaseFragment
的子类中您可以通过v获取当前页面的DataBinding
实例。
protected lateinit var v: DataBinding
获取当前的ViewModel实例
在GlassBaseFragment
的子类中您可以通过vm获取当前页面的ViewModel
实例。
protected lateinit var vm: ViewModel
EmptyViewModel
当开发者编写一些不需要ViewModel
的简单页面时,可以在声明类的时候传入EmptyViewModel
作为空ViewModel
。例如:
class MainActivity : GlassBaseActivity<ActivityMainBinding, EmptyViewModel>() { }
快速获取所属Activity
开发者可以通过baseActivity
字段获取当前Fragment
所属的GlassBaseActivity
,或者通过activity
获取当前Fragment
所属的BaseActivity
(GlassBaseActivity
的父类)。
lateinit var baseActivity: GlassBaseActivity<*, *>
protected var activity: BaseActivity<*, *>? = null
快速获取Logcat TAG
开发者可以通过TAG
字段获取当前Activity
的javaClass.simpleName
作为Logcat
的日志标签
protected val TAG: String = this.javaClass.simpleName
快速打印堆栈调用
开发者可以通过调用logE
、logW
、logD
快速打印logcat
日志,并可选传入depth
打印指定深度的堆栈信息,方便Lambda
函数日志打印和Kotlin高阶函数日志打印。
fun logE(log: Any, depth: Int = 1)
fun logW(log: Any, depth: Int = 1)
fun logD(log: Any, depth: Int = 1)
Logcat扩展函数
我们也为Kotlin开发者提供了此类扩展函数,方便对任意对象做Logcat日志打印。
fun Any.logE(tag: String = "") {
Log.e(TAG.format(tag), this.toString())
}
fun Any.logW(tag: String = "") ...
fun Any.logI(tag: String = "") ...
fun Any.logV(tag: String = "") ...
fun Any.logD(tag: String = "") ...
监听用户触发的各类操作交互
为了避免复杂的操作时间分发,我们推荐开发者从GlassActivity
中重写相关事件回调方法,根据实际需求完成事件到GlassBaseFragment
的分发传递。关于如何在GlassActivity
中监听设备交互事件回调,详见交互逻辑/监听手势操作
跳转页面
开发者可以通过jumpPage
方法便捷的完成页面跳转并携带参数的操作,等效于startActivity
等Intent
传递操作。
open fun jumpPage(activity: Class<*>)
open fun jumpPage(activity: Class<*>, map: LinkedHashMap<String, String>)