diff --git a/Lib_Base/src/main/AndroidManifest.xml b/Lib_Base/src/main/AndroidManifest.xml index 6f94496..102648e 100644 --- a/Lib_Base/src/main/AndroidManifest.xml +++ b/Lib_Base/src/main/AndroidManifest.xml @@ -1,7 +1 @@ - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt index 816b029..b561403 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt @@ -20,30 +20,22 @@ import java.lang.reflect.ParameterizedType abstract class BaseFrameActivity : AppCompatActivity() { - protected val mViewModel: VM by lazy(mode = LazyThreadSafetyMode.NONE) { - //init ViewModel | getActualTypeArguments [0]=是第一个泛型参数 | [1] = 是类的第二个泛型参数 - val tClass: Class = - (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[1] as Class - ViewModelProvider(this).get(tClass) + protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) { + val vbClass: Class = + (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class + 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 = + (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[1] as Class + ViewModelProvider(this).get(vmClass) } protected abstract fun initView() protected abstract fun initViewObserve() - /** - * 反射初始化ViewBinding - */ - private fun getViewBindingReflex(): VB { - val tClass: Class = - (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class - 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) diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt index 6b75197..b754596 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt @@ -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(private val vmClass: Class) : +abstract class BaseFrameFragment : Fragment() { + protected lateinit var mBinding: VB + protected val mViewModel: VM by lazy(mode = LazyThreadSafetyMode.NONE) { + val vmClass: Class = + (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[1] as Class 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(private val v container: ViewGroup?, savedInstanceState: Bundle? ): View? { + val vbClass: Class = + (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class + val inflate = vbClass.getDeclaredMethod("inflate", LayoutInflater::class.java) + mBinding = inflate.invoke(null, layoutInflater, container, false) as VB return mBinding.root } diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMActivity.kt b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMActivity.kt index a60ed3e..beda88f 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMActivity.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMActivity.kt @@ -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 : 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 = + (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class + val inflate = vbClass.getMethod("inflate", LayoutInflater::class.java) + inflate.invoke(null, layoutInflater) as VB + } protected abstract fun initView() override fun onCreate(savedInstanceState: Bundle?) { diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMFragment.kt b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMFragment.kt index d7d4004..c6c7d37 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMFragment.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameNotMVVMFragment.kt @@ -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 : 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 : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + val vbClass: Class = + (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class + val inflate = vbClass.getDeclaredMethod("inflate", LayoutInflater::class.java) + mBinding = inflate.invoke(null, layoutInflater, container, false) as VB return mBinding.root } diff --git a/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseActivity.kt b/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseActivity.kt index 2ff9828..02ed1cd 100644 --- a/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseActivity.kt +++ b/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseActivity.kt @@ -10,5 +10,4 @@ import com.quyunshuo.base.mvvm.v.BaseFrameActivity * @Class: BaseActivity * @Remark: 项目相关的Activity基类 */ -abstract class BaseActivity : - BaseFrameActivity() \ No newline at end of file +abstract class BaseActivity : BaseFrameActivity() \ No newline at end of file diff --git a/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseFragment.kt b/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseFragment.kt index b136eed..c71d5d5 100644 --- a/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseFragment.kt +++ b/Lib_Common/src/main/java/com/quyunshuo/common/ui/BaseFragment.kt @@ -10,5 +10,4 @@ import com.quyunshuo.base.mvvm.v.BaseFrameFragment * @Class: BaseFragment * @Remark: 项目相关的Fragment基类 */ -abstract class BaseFragment(vmClass: Class) : - BaseFrameFragment(vmClass) \ No newline at end of file +abstract class BaseFragment : BaseFrameFragment() \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6ae3e96..7dd1ab4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,9 +65,6 @@ android { kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } - buildFeatures { - viewBinding = true - } } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f5de985..dd4776c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,15 +21,7 @@ android:supportsRtl="true" android:theme="@style/base_AppTheme" tools:ignore="UnusedAttribute"> - - - - - - + { - - @Override - protected void initView() { - getMViewModel().test(); - getMBinding().testTv.setText("反射初始化 ViewBinding"); - } - - @Override - protected void initViewObserve() { - - } - -} diff --git a/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyViewModel.java b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyViewModel.java deleted file mode 100644 index 5636c66..0000000 --- a/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyViewModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.quyunshuo.androidbaseframemvvm; - -import android.util.Log; - -import androidx.lifecycle.ViewModel; - -/** - * @author DBoy - * @date 2020/9/26 - * Class 描述 : - */ -public class MyViewModel extends ViewModel { - - public void test(){ - Log.e("DJC", "AAA"); - } -} diff --git a/app/src/main/res/layout/my_activity_layout.xml b/app/src/main/res/layout/my_activity_layout.xml deleted file mode 100644 index 383e41c..0000000 --- a/app/src/main/res/layout/my_activity_layout.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file