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>)
