From f14f5e9b32b3c1e5e212212cee83352cc601cf4f Mon Sep 17 00:00:00 2001 From: Dboy <894230813@qq.com> Date: Sat, 26 Sep 2020 15:53:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8D=E5=B0=84=E5=88=9D=E5=A7=8B=E5=8C=96Vi?= =?UTF-8?q?ewBinding=E5=92=8CViewModel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mvvm/v/BaseFrameActivity.kt | 24 +++++++++-- .../com/quyunshuo/base/mvvm/v/MyActivity.java | 25 ----------- .../quyunshuo/base/mvvm/v/MyBaseActivity.java | 43 ------------------- .../com/quyunshuo/common/ui/BaseActivity.kt | 4 +- app/build.gradle | 3 ++ app/src/main/AndroidManifest.xml | 2 +- .../androidbaseframemvvm/MyActivity.java | 27 ++++++++++++ .../androidbaseframemvvm}/MyViewModel.java | 2 +- .../main/res/layout/my_activity_layout.xml | 11 +++-- 9 files changed, 61 insertions(+), 80 deletions(-) delete mode 100644 Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyActivity.java delete mode 100644 Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyBaseActivity.java create mode 100644 app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyActivity.java rename {Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v => app/src/main/java/com/quyunshuo/androidbaseframemvvm}/MyViewModel.java (84%) rename Lib_Base/src/main/res/layout/my_activity.xml => app/src/main/res/layout/my_activity_layout.xml (60%) 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 94d707a..816b029 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 @@ -1,6 +1,7 @@ package com.quyunshuo.base.mvvm.v import android.os.Bundle +import android.view.LayoutInflater import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider @@ -8,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 @@ -15,19 +17,33 @@ import com.quyunshuo.base.utils.EventBusUtils * @Class: BaseFrameActivity * @Remark: Activity基类 与项目无关 */ -abstract class BaseFrameActivity(private val vmClass: Class) : +abstract class BaseFrameActivity : AppCompatActivity() { protected val mViewModel: VM by lazy(mode = LazyThreadSafetyMode.NONE) { - ViewModelProvider(this).get(vmClass) + //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) { initViewBinding() } + protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) { + getViewBindingReflex() + } - protected abstract fun initViewBinding(): VB 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/MyActivity.java b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyActivity.java deleted file mode 100644 index cdd9eb6..0000000 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyActivity.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.quyunshuo.base.mvvm.v; - -import android.view.LayoutInflater; - -import com.quyunshuo.base.databinding.MyActivityBinding; - -import org.jetbrains.annotations.NotNull; - -/** - * @author DBoy - * @date 2020/9/26 - * Class 描述 : - */ -public class MyActivity extends MyBaseActivity { - - @Override - protected MyActivityBinding getViewBinding(LayoutInflater from) { - return MyActivityBinding.inflate(from); - } - - @Override - protected void initViewAndData() { - mViewModel.test(); - } -} diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyBaseActivity.java b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyBaseActivity.java deleted file mode 100644 index 65fbae8..0000000 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyBaseActivity.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.quyunshuo.base.mvvm.v; - -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.ViewModel; -import androidx.lifecycle.ViewModelProvider; -import androidx.viewbinding.ViewBinding; - -import java.lang.reflect.ParameterizedType; - -/** - * @author DBoy - * @date 2020/9/26 - * Class 描述 : - */ -public abstract class MyBaseActivity extends AppCompatActivity { - - protected V viewBinding; - - protected M mViewModel; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - viewBinding = getViewBinding(LayoutInflater.from(this)); - setContentView(viewBinding.getRoot()); - - //init ViewModel | getActualTypeArguments[0] =是第一个泛型参数 [1] = 是类的第二个泛型参数 - Class tClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; - mViewModel = new ViewModelProvider(this).get(tClass); - - initViewAndData(); - } - - protected abstract V getViewBinding(LayoutInflater from); - - protected abstract void initViewAndData(); - -} 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 b856366..2ff9828 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,5 @@ import com.quyunshuo.base.mvvm.v.BaseFrameActivity * @Class: BaseActivity * @Remark: 项目相关的Activity基类 */ -abstract class BaseActivity(vmClass: Class) : - BaseFrameActivity(vmClass) \ No newline at end of file +abstract class BaseActivity : + BaseFrameActivity() \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7dd1ab4..6ae3e96 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,6 +65,9 @@ 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 276e397..f5de985 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ android:theme="@style/base_AppTheme" tools:ignore="UnusedAttribute"> diff --git a/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyActivity.java b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyActivity.java new file mode 100644 index 0000000..f193f4a --- /dev/null +++ b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyActivity.java @@ -0,0 +1,27 @@ +package com.quyunshuo.androidbaseframemvvm; + + +import com.quyunshuo.androidbaseframemvvm.databinding.MyActivityLayoutBinding; +import com.quyunshuo.base.mvvm.v.BaseFrameActivity; + +import org.jetbrains.annotations.NotNull; + +/** + * @author DBoy + * @date 2020/9/26 + * Class 描述 : + */ +public class MyActivity extends BaseFrameActivity { + + @Override + protected void initView() { + getMViewModel().test(); + getMBinding().testTv.setText("反射初始化 ViewBinding"); + } + + @Override + protected void initViewObserve() { + + } + +} diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyViewModel.java b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyViewModel.java similarity index 84% rename from Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyViewModel.java rename to app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyViewModel.java index 45999ed..5636c66 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/MyViewModel.java +++ b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/MyViewModel.java @@ -1,4 +1,4 @@ -package com.quyunshuo.base.mvvm.v; +package com.quyunshuo.androidbaseframemvvm; import android.util.Log; diff --git a/Lib_Base/src/main/res/layout/my_activity.xml b/app/src/main/res/layout/my_activity_layout.xml similarity index 60% rename from Lib_Base/src/main/res/layout/my_activity.xml rename to app/src/main/res/layout/my_activity_layout.xml index 80cd62a..383e41c 100644 --- a/Lib_Base/src/main/res/layout/my_activity.xml +++ b/app/src/main/res/layout/my_activity_layout.xml @@ -1,12 +1,15 @@ + android:layout_height="match_parent" + android:background="#fff"> + android:layout_height="match_parent" + android:gravity="center" + android:textColor="#000" + android:textSize="20sp" /> \ No newline at end of file