Browse Source

可行!

詹子聪 5 years ago
parent
commit
a0aee5d869

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

@@ -1,6 +1,6 @@
 package com.miekir.newmvp;
 
-import java.util.List;
+import com.miekir.mvp.view.IView;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -9,6 +9,6 @@ import java.util.List;
  * @date 2020/10/15 10:47
  * Description:
  */
-public interface ICView {
-    void onDataCome(int code, String msg, List<TestBean1> data, int source);
+public interface IMainView extends IView {
+    void onMainResult();
 }

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

@@ -2,13 +2,14 @@ package com.miekir.newmvp;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
 
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMvpActivity;
 
-public class MainActivity extends BaseMvpActivity implements View.OnClickListener {
+public class MainActivity extends BaseMvpActivity implements View.OnClickListener, IMainView {
 
     @InjectPresenter
     MainPresenter presenter;
@@ -39,10 +40,15 @@ public class MainActivity extends BaseMvpActivity implements View.OnClickListene
         switch (v.getId()) {
             case R.id.view_test:
                 // 点击之后,后台执行耗时操作
-                startActivity(new Intent(this, MainActivity.class));
+                presenter.doWork();
                 break;
             default:
                 break;
         }
     }
+
+    @Override
+    public void onMainResult() {
+        Log.d(getClass().getName(), "main obj is " + this.toString());
+    }
 }

+ 5 - 2
app/src/main/java/com/miekir/newmvp/MainPresenter.java

@@ -1,7 +1,6 @@
 package com.miekir.newmvp;
 
 import com.miekir.mvp.presenter.BasePresenter;
-import com.miekir.mvp.view.IView;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -10,9 +9,13 @@ import com.miekir.mvp.view.IView;
  * @date 2020/11/18 14:27
  * Description:
  */
-public class MainPresenter extends BasePresenter<IView> {
+public class MainPresenter extends BasePresenter<IMainView> {
     @Override
     public void onTaskCancel() {
 
     }
+
+    public void doWork() {
+        getView().onMainResult();
+    }
 }

+ 5 - 3
mvp/src/main/java/com/miekir/mvp/base/BaseActivity.java

@@ -24,9 +24,11 @@ public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         // 状态栏深色模式,改变状态栏文字颜色
-//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-//            getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
-//        }
+        //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+        //    getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+        //}
+        // 重新create之后,activity对象不一样
+        //Log.d(getClass().getName(), "obj is : "  + this.toString());
 
         super.onCreate(savedInstanceState);
         rootView = LayoutInflater.from(this).inflate(getLayoutID(), null);

+ 3 - 3
mvp/src/main/java/com/miekir/mvp/view/BaseMvpActivity.java

@@ -13,12 +13,12 @@ import java.util.List;
  * 基于MVP思想的Activity
  * @author zhan
  */
-public abstract class BaseMvpActivity<V extends IView> extends BaseActivity implements IView {
-    private List<BasePresenter<V>> mInjectPresenters = new ArrayList<>();
+public abstract class BaseMvpActivity extends BaseActivity implements IView {
+    private List<BasePresenter<?>> mInjectPresenters = new ArrayList<>();
 
     @Override
     public void onTaskCancel() {
-        for (BasePresenter<V> viewModel : mInjectPresenters) {
+        for (BasePresenter<?> viewModel : mInjectPresenters) {
             viewModel.onTaskCancel();
         }
     }

+ 4 - 4
mvp/src/main/java/com/miekir/mvp/view/ViewHelper.java

@@ -23,7 +23,7 @@ public class ViewHelper {
      * 初始化添加注解的变量
      * final Class<? extends IView> getClass,可以代表接口的实现类
      */
-    public static <V extends IView> void initVariables(List<BasePresenter<V>> mInjectPresenters, final ViewModelStoreOwner owner, final IView iView) {
+    public static  void initVariables(List<BasePresenter<?>> mInjectPresenters, final ViewModelStoreOwner owner, final IView iView) {
         mInjectPresenters.clear();
         // 这里可以获取到子类的成员变量
         Field[] fields = iView.getClass().getDeclaredFields();
@@ -38,12 +38,12 @@ public class ViewHelper {
                 field.setAccessible(true);
 
                 // 父类引用指向子类对象
-                Class<? extends BasePresenter<V>> type = (Class<? extends BasePresenter<V>>) field.getType();
+                Class<? extends BasePresenter<?>> type = (Class<? extends BasePresenter<?>>) field.getType();
                 //BasePresenter<V> presenter = type.newInstance();
                 // todo 下面这种方法是单例形式,会造成重复回调的问题
-                BasePresenter<V> presenter = new ViewModelProvider(owner).get(type);
+                BasePresenter presenter = new ViewModelProvider(owner).get(type);
                 field.set(iView, presenter);
-                presenter.attachView((V) iView);
+                presenter.attachView(iView);
                 mInjectPresenters.add(presenter);
             } catch (IllegalAccessException e) {
                 e.printStackTrace();