Fragment基类

Teamhelper Community2024-03-19 09:00:00

Fragment用法基本与Activity保持一致。如果你掌握了Activity基类的用法,那么GlassBaseFragment的用法将符合你的开发者直觉。

快速使用

创建一个新的Fragment继承自GlassBaseFragment,其中GlassBaseFragment继承时需要传入当前FragmentDataBinding泛型类型和ViewModel类型,这样GlassBaseFragment的子类实例化时会根据类型信息通过反射自动创建DataBindingViewModel实例。以下是一个简易的代码示例。

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

下面是每个部分的功能描述:

  1. Methods: 类的方法,包括设生命周期事件处理(如onResumeonPauseonDestroy)等。

  2. 最终父类为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字段获取当前ActivityjavaClass.simpleName作为Logcat的日志标签

protected val TAG: String = this.javaClass.simpleName

快速打印堆栈调用

开发者可以通过调用logElogWlogD快速打印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方法便捷的完成页面跳转并携带参数的操作,等效于startActivityIntent传递操作。

open fun jumpPage(activity: Class<*>)

open fun jumpPage(activity: Class<*>, map: LinkedHashMap<String, String>)
Last Updated 4/15/2024, 10:24:57 AM