詹子聪 5 anni fa
parent
commit
5b840b2bab

+ 4 - 5
app/build.gradle

@@ -1,12 +1,12 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 30
-    buildToolsVersion "29.0.3"
+    compileSdkVersion versions.compileSdk
+    buildToolsVersion versions.buildTools
     defaultConfig {
         applicationId "com.miekir.newmvp"
-        minSdkVersion 21
-        targetSdkVersion 30
+        minSdkVersion versions.minSdk
+        targetSdkVersion versions.targetSdk
         versionCode 1
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -21,7 +21,6 @@ android {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation 'androidx.appcompat:appcompat:1.0.2'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.0'

+ 8 - 2
app/src/main/java/com/miekir/newmvp/MainActivity.java

@@ -1,9 +1,9 @@
 package com.miekir.newmvp;
 
-import androidx.appcompat.app.AppCompatActivity;
 
 import android.os.Bundle;
 import android.util.Log;
+import android.view.View;
 
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMVPActivity;
@@ -27,6 +27,12 @@ public class MainActivity extends BaseMVPActivity implements ITestView {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         presenter.go();
+        findViewById(R.id.view_test).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                presenter.go();
+            }
+        });
     }
 
     @Override
@@ -34,7 +40,7 @@ public class MainActivity extends BaseMVPActivity implements ITestView {
         runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                Log.e("mmmmm", "code: " + code);
+
             }
         });
     }

+ 3 - 1
app/src/main/java/com/miekir/newmvp/TestPresenter.java

@@ -1,5 +1,6 @@
 package com.miekir.newmvp;
 
+import com.miekir.mvp.base.BaseResult;
 import com.miekir.mvp.presenter.BasePresenter;
 
 /**
@@ -16,7 +17,8 @@ public class TestPresenter extends BasePresenter<ITestView> {
             public void run() {
                 try {
                     Thread.sleep(10000);
-                    getView().onLoginResult(3, "ddd");
+                    //getView().onLoginResult(3, "ddd");
+                    getLiveData().postValue(new BaseResult(0, "dd"));
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

+ 2 - 1
app/src/main/res/layout/activity_main.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".MainActivity">
+    tools:context=".MainActivity"
+    android:id="@+id/view_test">
 
     <TextView
         android:layout_width="wrap_content"

+ 1 - 1
mvp/build.gradle

@@ -26,7 +26,7 @@ android {
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
 
-    implementation 'androidx.appcompat:appcompat:1.1.0'
+    compile 'androidx.appcompat:appcompat:1.3.0-alpha01'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

+ 34 - 0
mvp/src/main/java/com/miekir/mvp/base/BaseResult.java

@@ -0,0 +1,34 @@
+package com.miekir.mvp.base;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/10/6 21:30
+ * Description:
+ */
+public class BaseResult {
+    private int code;
+    private String message;
+
+    public BaseResult(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 14 - 5
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenter.java

@@ -1,6 +1,10 @@
 package com.miekir.mvp.presenter;
 
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
 import com.miekir.mvp.ProxyHandler;
+import com.miekir.mvp.base.BaseResult;
 import com.miekir.mvp.view.IView;
 
 import java.lang.ref.WeakReference;
@@ -10,14 +14,19 @@ import java.lang.reflect.Proxy;
 public abstract class BasePresenter<V extends IView> {
     private WeakReference<V> wrf;
 
-    private Class<V> vClazz;
-    public void attachView(V view) {
-        vClazz = (Class<V>) view.getClass();
+    private MutableLiveData<BaseResult> mLiveData;
+    public void attachView(V view, MutableLiveData<BaseResult> liveData) {
         wrf = new WeakReference<V>(view);
+        mLiveData = liveData;
     }
 
-    public V getView() {
-        return wrf == null ? null : wrf.get();
+//    public V getView() {
+//        return wrf == null ? null : wrf.get();
+//    }
+
+
+    public MutableLiveData<BaseResult> getLiveData() {
+        return mLiveData;
     }
 
     public void detachView() {

+ 19 - 1
mvp/src/main/java/com/miekir/mvp/view/BaseMVPActivity.java

@@ -1,8 +1,14 @@
 package com.miekir.mvp.view;
 
 import android.os.Bundle;
+import android.util.Log;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Observer;
 
 import com.miekir.mvp.base.BaseActivity;
+import com.miekir.mvp.base.BaseResult;
 import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.mvp.presenter.InjectPresenter;
 
@@ -37,9 +43,21 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
             InjectPresenter injectPresenter = field.getAnnotation(InjectPresenter.class);
             if (injectPresenter != null) {
                 try {
+                    //创建一个观察者去更新UI
+                    final Observer<BaseResult> observer = new Observer<BaseResult>() {
+                        @Override
+                        public void onChanged(final BaseResult result) {
+                            Log.e("mmmmm", "code: " + result.getCode());
+                        }
+                    };
+
+                    MutableLiveData<BaseResult> liveData = new MutableLiveData<BaseResult>();
+                    liveData.observe(this, observer);
+
+
                     Class<? extends BasePresenter> type = (Class<? extends BasePresenter>) field.getType();
                     BasePresenter mInjectPresenter = type.newInstance();
-                    mInjectPresenter.attachView(this);
+                    mInjectPresenter.attachView(this, liveData);
                     field.setAccessible(true);
                     field.set(this, mInjectPresenter);
                     mInjectPresenters.add(mInjectPresenter);

+ 2 - 1
mvp/src/main/java/com/miekir/mvp/view/BaseMVPFragment.java

@@ -38,7 +38,8 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
                 try {
                     Class<? extends BasePresenter> type = (Class<? extends BasePresenter>) field.getType();
                     BasePresenter mInjectPresenter = type.newInstance();
-                    mInjectPresenter.attachView(this);
+                    // todo
+                    mInjectPresenter.attachView(this, null);
                     field.setAccessible(true);
                     field.set(this, mInjectPresenter);
                     mInjectPresenters.add(mInjectPresenter);