|
|
@@ -5,10 +5,13 @@ import android.os.Bundle;
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
|
|
import com.miekir.mvp.base.BaseFragment;
|
|
|
+import com.miekir.mvp.base.DataResult;
|
|
|
import com.miekir.mvp.presenter.BasePresenter;
|
|
|
+import com.miekir.mvp.presenter.DataMethod;
|
|
|
import com.miekir.mvp.presenter.InjectPresenter;
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -23,12 +26,38 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
|
|
|
*/
|
|
|
protected boolean isUIVisible;
|
|
|
|
|
|
+ private List<Method> mDataMethodList = new ArrayList<>();
|
|
|
private List<BasePresenter> mInjectPresenters;
|
|
|
|
|
|
@Override
|
|
|
public void onCreateViewFinished(@Nullable Bundle savedInstanceState) {
|
|
|
onViewInit();
|
|
|
|
|
|
+ // 查找回调方法
|
|
|
+ if (mDataMethodList.size() == 0) {
|
|
|
+ Method[] methods = null;
|
|
|
+ try {
|
|
|
+ // This is faster than getMethods, especially when subscribers are fat classes like Activities
|
|
|
+ methods = getClass().getDeclaredMethods();
|
|
|
+ } catch (Throwable th) {
|
|
|
+ // Workaround for java.lang.NoClassDefFoundError, see https://github.com/greenrobot/EventBus/issues/149
|
|
|
+ try {
|
|
|
+ methods = getClass().getDeclaredMethods();
|
|
|
+ } catch (LinkageError error) { // super class of NoClassDefFoundError to be a bit more broad...
|
|
|
+ error.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (methods != null && methods.length > 0) {
|
|
|
+ for (Method method : methods) {
|
|
|
+ DataMethod dataMethod = method.getAnnotation(DataMethod.class);
|
|
|
+ if (dataMethod != null) {
|
|
|
+ mDataMethodList.add(method);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
mInjectPresenters = new ArrayList<>();
|
|
|
Field[] fields = this.getClass().getDeclaredFields();
|
|
|
for (Field field : fields) {
|
|
|
@@ -99,5 +128,17 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
|
|
|
mInjectPresenters.clear();
|
|
|
mInjectPresenters = null;
|
|
|
}
|
|
|
+
|
|
|
+ mDataMethodList.clear();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void onDataResult(DataResult result) {
|
|
|
+ for (Method method : mDataMethodList) {
|
|
|
+ try {
|
|
|
+ method.invoke(this, result.getCode(), result.getMessage(), result.getBean());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|