Browse Source

切换成viewbinding

Pq 3 years ago
parent
commit
481e94a4e0

+ 3 - 7
BaseLibrary/build.gradle

@@ -4,7 +4,6 @@ plugins {
 //    id 'kotlin-parcelize'
     id 'kotlin-android'
 //    id 'kotlin-android-extensions'
-    id 'com.jakewharton.butterknife'
 }
 apply plugin: 'kotlin-kapt'
 apply plugin: 'kotlin-android-extensions'
@@ -21,10 +20,6 @@ android {
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
 
-    buildFeatures {
-        viewBinding = true
-    }
-
     buildTypes {
         release {
             minifyEnabled false
@@ -38,6 +33,9 @@ android {
     kotlinOptions {
         jvmTarget = '1.8'
     }
+    buildFeatures{
+        viewBinding = true
+    }
 }
 
 kapt {
@@ -108,7 +106,5 @@ dependencies {
     api "com.github.Kennyc1012:MultiStateView:$multi_state_view_version"
     api "com.alibaba:arouter-api:$arouter_api_version"
     kapt "com.alibaba:arouter-compiler:$arouter_api_version"
-    api "com.jakewharton:butterknife:10.1.0"
-    annotationProcessor "com.jakewharton:butterknife-compiler:10.1.0"
 
 }

+ 1 - 12
BaseLibrary/proguard-rules.pro

@@ -18,15 +18,4 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
--keep class butterknife.** { *; }
--dontwarn butterknife.internal.**
--keep class **$$ViewBinder { *; }
-
--keepclasseswithmembernames class * {
-    @butterknife.* <fields>;
-}
-
--keepclasseswithmembernames class * {
-    @butterknife.* <methods>;
-}
+#-renamesourcefileattribute SourceFile

+ 6 - 10
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.kt

@@ -1,10 +1,7 @@
 package com.cooleshow.base.ui.activity
 
 import android.os.Bundle
-import android.view.View
-import android.widget.FrameLayout
-import butterknife.ButterKnife
-import butterknife.Unbinder
+import androidx.viewbinding.ViewBinding
 import com.cooleshow.base.common.AppManager
 import com.cooleshow.base.presenter.view.BaseView
 import com.cooleshow.base.utils.ToastUtils
@@ -15,21 +12,21 @@ import com.trello.rxlifecycle4.components.support.RxAppCompatActivity
 /*
     Activity基类,业务无关
  */
-abstract class BaseActivity : RxAppCompatActivity(), BaseView {
+abstract class BaseActivity<V : ViewBinding> : RxAppCompatActivity(), BaseView {
     var mLoading: ProgressLoading? = null;
-    var unbinder: Unbinder? = null;
+    lateinit var viewBinding: V;
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        setContentView(getLayoutId())
+        viewBinding = getLayoutView()
+        setContentView(viewBinding?.root)
         AppManager.instance.addActivity(this)
         QMUIStatusBarHelper.translucent(this)
-        unbinder = ButterKnife.bind(this)
         initView()
         initData()
     }
 
-    protected abstract fun getLayoutId(): Int
+    protected abstract fun getLayoutView(): V
 
     protected abstract fun initView()
 
@@ -54,6 +51,5 @@ abstract class BaseActivity : RxAppCompatActivity(), BaseView {
         super.onDestroy()
         AppManager.instance.finishActivity(this)
         mLoading?.stopAnim()
-        unbinder?.unbind()
     }
 }

+ 3 - 1
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java

@@ -2,7 +2,9 @@ package com.cooleshow.base.ui.activity;
 
 import com.cooleshow.base.presenter.BasePresenter;
 
-public abstract class BaseMVPActivity<P extends BasePresenter> extends BaseActivity {
+import androidx.viewbinding.ViewBinding;
+
+public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePresenter> extends BaseActivity<V> {
     protected P presenter;
 
     @Override

+ 0 - 2
BaseLibrary/src/main/java/com/cooleshow/base/ui/fragment/BaseFragment.java

@@ -20,7 +20,6 @@ import androidx.annotation.NonNull;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
-import butterknife.ButterKnife;
 
 public abstract class BaseFragment extends Fragment implements BaseView {
     protected Context mContext;
@@ -64,7 +63,6 @@ public abstract class BaseFragment extends Fragment implements BaseView {
         mViewStubContent.setLayoutResource(getLayoutResId());
         mViewStubContent.inflate();
         mLoading = ProgressLoading.Companion.create(requireContext());
-        ButterKnife.bind(this, rootView);
     }
 
     protected abstract int getLayoutResId();

+ 4 - 0
app/build.gradle

@@ -44,6 +44,10 @@ android {
     kotlinOptions {
         jvmTarget = '1.8'
     }
+
+    buildFeatures{
+        viewBinding = true
+    }
 }
 
 dependencies {

+ 4 - 3
app/src/main/java/com/example/cooleshow/ui/activity/MainActivity.kt

@@ -9,6 +9,7 @@ import com.cooleshow.base.ext.showToast
 import com.cooleshow.base.ui.activity.BaseActivity
 import com.cooleshow.provider.router.RouterPath
 import com.example.cooleshow.R
+import com.example.cooleshow.databinding.ActivityMainBinding
 import com.example.cooleshow.ui.fragment.HomeFragment
 import com.example.cooleshow.ui.fragment.MeFragment
 import java.util.*
@@ -16,7 +17,7 @@ import java.util.*
 import kotlinx.android.synthetic.main.activity_main.*
 
 @Route(path = RouterPath.APPCenter.PATH_HOME)
-class MainActivity : BaseActivity() {
+class MainActivity : BaseActivity<ActivityMainBinding>() {
 
 
     private var pressTime: Long = 0
@@ -43,8 +44,8 @@ class MainActivity : BaseActivity() {
         super.onCreate(savedInstanceState)
     }
 
-    override fun getLayoutId(): Int {
-        return R.layout.activity_main;
+    override fun getLayoutView(): ActivityMainBinding {
+        return ActivityMainBinding.inflate(layoutInflater)
     }
 
     override fun initView() {

+ 6 - 3
app/src/main/java/com/example/cooleshow/ui/activity/splash/SplashActivity.kt

@@ -4,17 +4,20 @@ import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.ui.activity.BaseActivity
 import com.cooleshow.provider.router.RouterPath
 import com.example.cooleshow.R
+import com.example.cooleshow.databinding.ActivitySplashBinding
 
 
 /**
  * Author by pq, Date on 2022/4/19.
  */
-class SplashActivity : BaseActivity() {
-    override fun getLayoutId(): Int {
-        return R.layout.ac_splash_layout
+class SplashActivity : BaseActivity<ActivitySplashBinding>() {
+    override fun getLayoutView(): ActivitySplashBinding {
+        return ActivitySplashBinding.inflate(layoutInflater)
     }
 
     override fun initView() {
         ARouter.getInstance().build(RouterPath.UserCenter.PATH_LOGIN).navigation()
     }
+
+
 }

+ 0 - 0
app/src/main/res/layout/ac_splash_layout.xml → app/src/main/res/layout/activity_splash.xml


+ 0 - 3
build.gradle

@@ -37,9 +37,6 @@ buildscript {
         classpath 'com.android.tools.build:gradle:4.2.0'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 //        classpath "com.alibaba:arouter-register:1.0.2"
-        //避免butterKnife在library中使用出现id冲突
-        classpath "org.aspectj:aspectjtools:1.8.9"
-        classpath "com.jakewharton:butterknife-gradle-plugin:10.2.1"
     }
 }
 

+ 3 - 3
teacher/build.gradle

@@ -1,7 +1,6 @@
 plugins {
     id 'com.android.application'
     id 'org.jetbrains.kotlin.android'
-    id 'com.jakewharton.butterknife'
 }
 apply plugin: 'kotlin-android-extensions'
 apply plugin: 'kotlin-kapt'
@@ -38,6 +37,9 @@ android {
     kotlinOptions {
         jvmTarget = '1.8'
     }
+    buildFeatures{
+        viewBinding = true
+    }
 }
 
 dependencies {
@@ -56,7 +58,5 @@ dependencies {
     api project(path: ':usercenter')
     implementation "com.alibaba:arouter-api:$arouter_api_version"
     kapt "com.alibaba:arouter-compiler:$arouter_api_version"
-    implementation "com.jakewharton:butterknife:10.1.0"
-    annotationProcessor "com.jakewharton:butterknife-compiler:10.1.0"
 
 }

+ 19 - 8
teacher/src/main/java/com/cooleshow/teacher/ui/main/MainActivity.java

@@ -8,27 +8,34 @@ import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.provider.router.RouterPath;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.HomePageAdapter;
+import com.cooleshow.teacher.databinding.ActivityMainBinding;
 
 import java.util.ArrayList;
+import java.util.Objects;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 import androidx.viewpager2.widget.ViewPager2;
-import butterknife.BindView;
 
 /**
  * Author by pq, Date on 2022/4/20.
  */
 @Route(path = RouterPath.APPCenter.PATH_HOME)
-public class MainActivity extends BaseActivity {
-    @BindView(R.id.viewpager)
-    ViewPager2 mViewPager;
-
+public class MainActivity extends BaseActivity<ActivityMainBinding> {
     private ArrayList<Fragment> mFragments = new ArrayList<>();
 
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @NonNull
     @Override
-    protected int getLayoutId() {
-        return R.layout.activity_main;
+    protected ActivityMainBinding getLayoutView() {
+        return ActivityMainBinding.inflate(getLayoutInflater());
     }
 
     @Override
@@ -44,6 +51,10 @@ public class MainActivity extends BaseActivity {
         mFragments.add(homeFragment2);
         mFragments.add(homeFragment3);
         mFragments.add(homeFragment4);
-        mViewPager.setAdapter(homePageAdapter);
+        homePageAdapter.setFragments(mFragments);
+        getViewBinding().viewPager.setAdapter(homePageAdapter);
+        getViewBinding().viewPager.setOffscreenPageLimit(mFragments.size());
+        getViewBinding().viewPager.setUserInputEnabled(false);
     }
+
 }

+ 5 - 3
teacher/src/main/java/com/cooleshow/teacher/ui/splash/SplashActivity.kt

@@ -4,17 +4,19 @@ import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.ui.activity.BaseActivity
 import com.cooleshow.provider.router.RouterPath
 import com.cooleshow.teacher.R
+import com.cooleshow.teacher.databinding.ActivitySplashLayoutBinding
 
 
 /**
  * Author by pq, Date on 2022/4/19.
  */
-class SplashActivity : BaseActivity() {
-    override fun getLayoutId(): Int {
-        return R.layout.ac_splash_layout
+class SplashActivity : BaseActivity<ActivitySplashLayoutBinding>() {
+    override fun getLayoutView(): ActivitySplashLayoutBinding {
+        return ActivitySplashLayoutBinding.inflate(layoutInflater)
     }
 
     override fun initView() {
         ARouter.getInstance().build(RouterPath.UserCenter.PATH_LOGIN).navigation()
     }
+
 }

+ 1 - 1
teacher/src/main/res/layout/activity_main.xml

@@ -7,7 +7,7 @@
     tools:context=".ui.main.MainActivity">
 
     <androidx.viewpager2.widget.ViewPager2
-        android:id="@+id/viewpager"
+        android:id="@+id/view_pager"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         app:layout_constraintBottom_toTopOf="@+id/navigation"

+ 0 - 0
teacher/src/main/res/layout/ac_splash_layout.xml → teacher/src/main/res/layout/activity_splash_layout.xml


+ 4 - 1
usercenter/build.gradle

@@ -49,6 +49,10 @@ android {
     packagingOptions {
         resources.excludes.add("META-INF/*")
     }
+
+    buildFeatures{
+        viewBinding = true
+    }
 }
 
 dependencies {
@@ -62,5 +66,4 @@ dependencies {
     implementation project(':BaseLibrary')
     //ARouter
     kapt "com.alibaba:arouter-compiler:$arouter_api_version"
-    annotationProcessor "com.jakewharton:butterknife-compiler:10.1.0"
 }

+ 5 - 3
usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/LoginActivity.kt

@@ -2,6 +2,7 @@ package com.cooleshow.usercenter.ui.activity
 
 import android.os.Bundle
 import android.text.TextUtils
+import androidx.viewbinding.ViewBinding
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.ext.onClick
@@ -11,20 +12,21 @@ import com.cooleshow.base.utils.helper.QMUIStatusBarHelper
 import com.cooleshow.provider.router.RouterPath
 import com.cooleshow.usercenter.R
 import com.cooleshow.usercenter.data.protocol.UserInfo
+import com.cooleshow.usercenter.databinding.ActivityLoginBinding
 import com.cooleshow.usercenter.presenter.LoginPresenter
 import com.cooleshow.usercenter.presenter.contract.LoginContract
 import kotlinx.android.synthetic.main.activity_login.*
 
 @Route(path = RouterPath.UserCenter.PATH_LOGIN)
-class LoginActivity : BaseMVPActivity<LoginPresenter>(), LoginContract.LoginView {
+class LoginActivity : BaseMVPActivity<ActivityLoginBinding,LoginPresenter>(), LoginContract.LoginView {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         QMUIStatusBarHelper.setStatusBarLightMode(this);
     }
 
-    override fun getLayoutId(): Int {
-        return R.layout.activity_login;
+    override fun getLayoutView(): ActivityLoginBinding {
+        return ActivityLoginBinding.inflate(layoutInflater)
     }
 
     override fun createPresenter(): LoginPresenter {

+ 7 - 3
usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/VerifyCodeLoginActivity.java

@@ -8,16 +8,19 @@ import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.provider.router.RouterPath;
 import com.cooleshow.usercenter.R;
 import com.cooleshow.usercenter.data.protocol.UserInfo;
+import com.cooleshow.usercenter.databinding.ActivityVerifyCodeLoginBinding;
 import com.cooleshow.usercenter.presenter.VerifyLoginPresenter;
 import com.cooleshow.usercenter.presenter.contract.VerifyLoginContract;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
 
 /**
  * Author by pq, Date on 2022/4/19.
  */
 @Route(path = RouterPath.UserCenter.PATH_VERIFY_LOGIN)
-public class VerifyCodeLoginActivity extends BaseMVPActivity<VerifyLoginPresenter> implements VerifyLoginContract.VerifyLoginView {
+public class VerifyCodeLoginActivity extends BaseMVPActivity<ActivityVerifyCodeLoginBinding, VerifyLoginPresenter> implements VerifyLoginContract.VerifyLoginView {
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -25,9 +28,10 @@ public class VerifyCodeLoginActivity extends BaseMVPActivity<VerifyLoginPresente
         QMUIStatusBarHelper.setStatusBarLightMode(this);
     }
 
+    @NonNull
     @Override
-    protected int getLayoutId() {
-        return R.layout.activity_verify_code_login;
+    protected ActivityVerifyCodeLoginBinding getLayoutView() {
+        return ActivityVerifyCodeLoginBinding.inflate(getLayoutInflater());
     }
 
     @Override