Modify: 基类调整,不再使用构造方法,采用反射进行初始化
This commit is contained in:
@ -1,7 +1 @@
|
||||
<manifest package="com.quyunshuo.base"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<application>
|
||||
|
||||
</application>
|
||||
</manifest>
|
||||
<manifest package="com.quyunshuo.base" />
|
||||
@ -20,30 +20,22 @@ import java.lang.reflect.ParameterizedType
|
||||
abstract class BaseFrameActivity<VB : ViewBinding, VM : ViewModel> :
|
||||
AppCompatActivity() {
|
||||
|
||||
protected val mViewModel: VM by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
//init ViewModel | getActualTypeArguments [0]=是第一个泛型参数 | [1] = 是类的第二个泛型参数
|
||||
val tClass: Class<VM> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[1] as Class<VM>
|
||||
ViewModelProvider(this).get(tClass)
|
||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
val vbClass: Class<VB> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
|
||||
val inflate = vbClass.getMethod("inflate", LayoutInflater::class.java)
|
||||
inflate.invoke(null, layoutInflater) as VB
|
||||
}
|
||||
|
||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
getViewBindingReflex()
|
||||
protected val mViewModel: VM by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
val vmClass: Class<VM> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[1] as Class<VM>
|
||||
ViewModelProvider(this).get(vmClass)
|
||||
}
|
||||
|
||||
protected abstract fun initView()
|
||||
protected abstract fun initViewObserve()
|
||||
|
||||
/**
|
||||
* 反射初始化ViewBinding
|
||||
*/
|
||||
private fun getViewBindingReflex(): VB {
|
||||
val tClass: Class<VB> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
|
||||
val infater = tClass.getMethod("inflate", LayoutInflater::class.java)
|
||||
return infater.invoke(null,layoutInflater) as VB
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(mBinding.root)
|
||||
|
||||
@ -11,6 +11,7 @@ import androidx.viewbinding.ViewBinding
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.quyunshuo.base.utils.EventBusRegister
|
||||
import com.quyunshuo.base.utils.EventBusUtils
|
||||
import java.lang.reflect.ParameterizedType
|
||||
|
||||
/**
|
||||
* @Author: QuYunShuo
|
||||
@ -18,16 +19,17 @@ import com.quyunshuo.base.utils.EventBusUtils
|
||||
* @Class: BaseFrameFragment
|
||||
* @Remark: Fragment基类 与项目无关
|
||||
*/
|
||||
abstract class BaseFrameFragment<VB : ViewBinding, VM : ViewModel>(private val vmClass: Class<VM>) :
|
||||
abstract class BaseFrameFragment<VB : ViewBinding, VM : ViewModel> :
|
||||
Fragment() {
|
||||
|
||||
protected lateinit var mBinding: VB
|
||||
|
||||
protected val mViewModel: VM by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
val vmClass: Class<VM> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[1] as Class<VM>
|
||||
ViewModelProvider(this).get(vmClass)
|
||||
}
|
||||
|
||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) { initViewBinding() }
|
||||
|
||||
protected abstract fun initViewBinding(): VB
|
||||
protected abstract fun initView()
|
||||
protected abstract fun initViewObserve()
|
||||
|
||||
@ -36,6 +38,10 @@ abstract class BaseFrameFragment<VB : ViewBinding, VM : ViewModel>(private val v
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val vbClass: Class<VB> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
|
||||
val inflate = vbClass.getDeclaredMethod("inflate", LayoutInflater::class.java)
|
||||
mBinding = inflate.invoke(null, layoutInflater, container, false) as VB
|
||||
return mBinding.root
|
||||
}
|
||||
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package com.quyunshuo.base.mvvm.v
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.quyunshuo.base.utils.EventBusRegister
|
||||
import com.quyunshuo.base.utils.EventBusUtils
|
||||
import java.lang.reflect.ParameterizedType
|
||||
|
||||
/**
|
||||
* @Author: QuYunShuo
|
||||
@ -15,9 +17,12 @@ import com.quyunshuo.base.utils.EventBusUtils
|
||||
*/
|
||||
abstract class BaseFrameNotMVVMActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
|
||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) { initViewBinding() }
|
||||
|
||||
protected abstract fun initViewBinding(): VB
|
||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
val vbClass: Class<VB> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
|
||||
val inflate = vbClass.getMethod("inflate", LayoutInflater::class.java)
|
||||
inflate.invoke(null, layoutInflater) as VB
|
||||
}
|
||||
protected abstract fun initView()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
||||
@ -9,6 +9,7 @@ import androidx.viewbinding.ViewBinding
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.quyunshuo.base.utils.EventBusRegister
|
||||
import com.quyunshuo.base.utils.EventBusUtils
|
||||
import java.lang.reflect.ParameterizedType
|
||||
|
||||
/**
|
||||
* @Author: QuYunShuo
|
||||
@ -18,9 +19,8 @@ import com.quyunshuo.base.utils.EventBusUtils
|
||||
*/
|
||||
abstract class BaseFrameNotMVVMFragment<VB : ViewBinding> : Fragment() {
|
||||
|
||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) { initViewBinding() }
|
||||
protected lateinit var mBinding: VB
|
||||
|
||||
protected abstract fun initViewBinding(): VB
|
||||
protected abstract fun initView()
|
||||
|
||||
override fun onCreateView(
|
||||
@ -28,6 +28,10 @@ abstract class BaseFrameNotMVVMFragment<VB : ViewBinding> : Fragment() {
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val vbClass: Class<VB> =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VB>
|
||||
val inflate = vbClass.getDeclaredMethod("inflate", LayoutInflater::class.java)
|
||||
mBinding = inflate.invoke(null, layoutInflater, container, false) as VB
|
||||
return mBinding.root
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user