From 69189de5a1bf2f4c7685e28d382377ce64f91120 Mon Sep 17 00:00:00 2001 From: Kongzue Date: Tue, 26 Nov 2024 15:43:59 +0800 Subject: [PATCH] =?UTF-8?q?7.0.4.1=20-=20=E5=B0=9D=E8=AF=95=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=B0=E6=96=B9=E6=B3=95=E8=8E=B7=E5=8F=96ViewBindi?= =?UTF-8?q?ng=E5=AF=B9=E8=B1=A1=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- baseframework/build.gradle | 2 +- .../baseframework/BaseBindingActivity.java | 30 +++++++++---------- .../baseframework/BaseBindingFragment.java | 29 ++++++------------ 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/baseframework/build.gradle b/baseframework/build.gradle index 7657fa3..3907fd5 100644 --- a/baseframework/build.gradle +++ b/baseframework/build.gradle @@ -14,7 +14,7 @@ android { minSdkVersion 15 targetSdkVersion 34 versionCode 140 - versionName "7.0.4" + versionName "7.0.4.1" } buildTypes { diff --git a/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingActivity.java b/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingActivity.java index ed9092e..80a565c 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingActivity.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingActivity.java @@ -8,8 +8,10 @@ import com.kongzue.baseframework.util.JumpParameter; import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; -public abstract class BaseBindingActivity extends BaseActivity{ +public abstract class BaseBindingActivity extends BaseActivity { protected VB binding; @@ -30,21 +32,17 @@ public View resetContentView() { } private View userDataBindingCreateLayout() { - String className = getClass().getSimpleName(); - if (className.endsWith("Activity")) { - className = className.substring(0, className.length() - 8); - } - String bindingClassName = getPackageName() + ".databinding.Activity" + className + "Binding"; - - try { - // 通过反射实例化Binding对象 - Class bindingClass = Class.forName(bindingClassName); - Method inflateMethod = bindingClass.getMethod("inflate", LayoutInflater.class); - binding = (VB) inflateMethod.invoke(null, getLayoutInflater()); - - return binding.getRoot(); - } catch (Exception e) { - e.printStackTrace(); + Type superclass = getClass().getGenericSuperclass(); + if (superclass instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) superclass; + Type type = parameterizedType.getActualTypeArguments()[0]; + try { + Class clazz = (Class) type; + binding = (VB) clazz.getMethod("inflate", getLayoutInflater().getClass()).invoke(null, getLayoutInflater()); + return binding.getRoot(); + } catch (Exception e) { + throw new RuntimeException("ViewBinding creation failed", e); + } } return null; } diff --git a/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingFragment.java b/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingFragment.java index 7c3b81f..1fbdc13 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingFragment.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/BaseBindingFragment.java @@ -7,6 +7,7 @@ import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; public abstract class BaseBindingFragment extends BaseFragment { @@ -36,30 +37,18 @@ public View resetContentView() { public abstract void setEvents(); private View userDataBindingCreateLayout() { - if (binding == null) { - String bindingClassName = getViewBindClassName(); + Type superclass = getClass().getGenericSuperclass(); + if (superclass instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) superclass; + Type type = parameterizedType.getActualTypeArguments()[1]; try { - // 通过反射实例化Binding对象 - Class bindingClass = Class.forName(bindingClassName); - Method inflateMethod = bindingClass.getMethod("inflate", LayoutInflater.class); - binding = (VB) inflateMethod.invoke(null, getLayoutInflater()); + Class clazz = (Class) type; + binding = (VB) clazz.getMethod("inflate", getLayoutInflater().getClass()).invoke(null, getLayoutInflater()); return binding.getRoot(); } catch (Exception e) { - e.printStackTrace(); + throw new RuntimeException("ViewBinding creation failed", e); } - return null; - } else { - return binding.getRoot(); } - } - - private String getViewBindClassName() { - ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass(); - String type = genericSuperclass.getActualTypeArguments()[1].toString(); - if (type.contains(" ")) { - String[] splitType = type.split(" "); - type = splitType[splitType.length - 1]; - } - return type; + return null; } }