Przeglądaj źródła

[공통][Bug] FragmentBase 구조 변경 2
- popBackStack() 에 대비하여 presenter/model 을 create/destroy

hyodong.min 7 lat temu
rodzic
commit
d835863e23

+ 11 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/model/FAQModel.java

@@ -25,15 +25,12 @@ import kr.co.zumo.app.lifeplus.view.Event;
  */
 public class FAQModel extends Model {
 
-  private CompositeDisposable disposable = new CompositeDisposable();
+  private CompositeDisposable disposable;
   private List<FAQBean> faqBeans;
 
   @Override
   protected void destroyInternal() {
-    if (null != disposable) {
-      disposable.dispose();
-      disposable = null;
-    }
+    disposeLoading();
   }
 
   @Override
@@ -43,7 +40,7 @@ public class FAQModel extends Model {
 
   @Override
   protected void stopInternal() {
-
+    disposeLoading();
   }
 
   @Override
@@ -53,13 +50,21 @@ public class FAQModel extends Model {
 
   @Override
   protected void pauseInternal() {
+    disposeLoading();
+  }
 
+  private void disposeLoading(){
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
   }
 
   /**
    * FAQ 불러오기;
    */
   public void loadFaq() {
+    disposable = new CompositeDisposable();
     disposable.add(
       new APIFAQModule().call(new RequestBean(), new IAPIModuleListener<FAQResultBean>() {
           @Override

+ 4 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/MainModel.java

@@ -68,6 +68,9 @@ public class MainModel extends Model {
 
   @Override
   protected void pauseInternal() {
-
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
   }
 }

+ 4 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/RestMemberModel.java

@@ -49,7 +49,10 @@ public class RestMemberModel extends Model {
 
   @Override
   protected void pauseInternal() {
-
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
   }
 
   /**

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/SignUpModel.java

@@ -94,7 +94,7 @@ public class SignUpModel extends Model {
 
   @Override
   protected void pauseInternal() {
-
+    stopBannerRequest();
   }
 
   /**

+ 0 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/FragmentChangeCommand.java

@@ -48,15 +48,12 @@ public class FragmentChangeCommand extends Command<Model, IView, Presenter> {
 
     switch (direction) {
       case ScreenID.DIRECTION_NEXT:
-        presenter.destroy();
         screenChanger.changeToNext(fragmentId);
         break;
       case ScreenID.DIRECTION_BACK:
-        presenter.destroy();
         screenChanger.changeToBack(fragmentId);
         break;
       case ScreenID.DIRECTION_NONE:
-        presenter.destroy();
         screenChanger.changeTo(fragmentId);
         break;
       default:

+ 62 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/FragmentBase.java

@@ -3,8 +3,8 @@
  */
 package kr.co.zumo.app.lifeplus.view.fragment;
 
+import android.content.Context;
 import android.os.Bundle;
-import android.support.annotation.CallSuper;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
@@ -40,31 +40,47 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
    * Fragment
    ***********************************/
 
+  @Override
+  public void onAttach(Context context) {
+    Log.e("APP# FragmentBase | onAttach", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
+    super.onAttach(context);
+  }
+
   @Override
   public void onCreate(@Nullable Bundle savedInstanceState) {
+    Log.e("APP# FragmentBase | onCreate", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
     super.onCreate(savedInstanceState);
   }
 
   @Nullable
   @Override
   public final View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-    Log.w("APP# FragmentBase | onCreateView", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
+    Log.e("APP# FragmentBase | onCreateView", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
 
+    /**
+     * Presenter/Model 은 onCreateView() 에서 생성하여 popStack() 때에도 사용되도록 한다.
+     */
     presenter = definePresenter();
+
     defineActionBar();
     defineActionButton();
 
     return onAfterCreateView(inflater, container, savedInstanceState);
   }
 
-  protected abstract View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState);
+  @Override
+  public final void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+    Log.e("APP# FragmentBase | onViewCreated", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
+    super.onViewCreated(view, savedInstanceState);
+
+    onAfterActivityCreated(savedInstanceState);
+  }
 
   @Override
   public final void onActivityCreated(@Nullable Bundle savedInstanceState) {
+    Log.e("APP# FragmentBase | onActivityCreated", "| >>>>>>>>>>>> " + this.getClass().getSimpleName());
     super.onActivityCreated(savedInstanceState);
 
-    onAfterActivityCreated(savedInstanceState);
-
   }
 
   @Override
@@ -91,22 +107,40 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
     super.onStop();
   }
 
-  @CallSuper
   @Override
   public void onDestroyView() {
     Log.w("APP# FragmentBase | onDestroyView", "| <<<<<<<<<<<<< " + this.getClass().getSimpleName());
-
     if (null != disposable) {
       disposable.dispose();
       disposable = null;
     }
 
+    /**
+     * fragment 전환 시 onDestroyView() 까지만 실행된다.
+     */
+
     if (null != presenter) {
       presenter.destroy();
       presenter = null;
     }
 
     super.onDestroyView();
+
+    onAfterDestroyView();
+  }
+
+  @Override
+  public final void onDestroy() {
+    Log.w("APP# FragmentBase | onDestroy", "| <<<<<<<<<<<<< " + this.getClass().getSimpleName());
+    super.onDestroy();
+
+    onAfterDestroy();
+  }
+
+  @Override
+  public void onDetach() {
+    Log.w("APP# FragmentBase | onDetach", "| <<<<<<<<<<<<< " + this.getClass().getSimpleName());
+    super.onDetach();
   }
 
   /***********************************
@@ -118,7 +152,17 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
   }
 
   /**
-   * onCreate() 처리 후 호출된다
+   * onActivityCreated() 후 호출 된다.
+   *
+   * @param inflater
+   * @param container
+   * @param savedInstanceState
+   * @return
+   */
+  protected abstract View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState);
+
+  /**
+   * onViewCreated() 처리 후 호출된다
    *
    * @param savedInstanceState
    */
@@ -142,6 +186,16 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
    */
   protected abstract P definePresenter();
 
+  /**
+   * onDestroyView() 처리 후 호출된다.
+   */
+  protected void onAfterDestroyView() {}
+
+  /**
+   * onDestroy() 처리 후 호출된다.
+   */
+  protected void onAfterDestroy() {}
+
   /**
    * Android life-cycle 에 귀속되는 모델을 반환한다.
    * - 사실 MVVM 사용되는 ViewModel 이지만 MVP 의 Model 로 사용한다.

+ 6 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/faq/FAQFragment.java

@@ -9,6 +9,7 @@ import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.TabLayout;
 import android.support.v4.view.ViewPager;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -94,4 +95,9 @@ public class FAQFragment extends FragmentBase<FAQPresenter> implements IFAQView
     viewPagerFaq.setAdapter(faqPagerAdapter);
 
   }
+
+  @Override
+  public void onDestroyView() {
+    super.onDestroyView();
+  }
 }

+ 0 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/info/PermissionInfoFragment.java

@@ -44,11 +44,6 @@ public class PermissionInfoFragment extends FragmentBase<PermissionInfoPresenter
 
   }
 
-  @Override
-  public void onDestroy() {
-    super.onDestroy();
-  }
-
   @Override
   protected void defineActionBar() {
     ActionBarManager.getInstance().begin().hide();

+ 1 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/FAQPresenter.java

@@ -31,8 +31,6 @@ public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
 
   public FAQPresenter(FAQModel model, IFAQView view) {
     super(model, view);
-
-    model.loadFaq();
   }
 
   @Override
@@ -62,7 +60,7 @@ public class FAQPresenter extends Presenter<FAQModel, IFAQView> {
 
   @Override
   protected void startInternal() {
-
+    model.loadFaq();
   }
 
   @Override