Commit 0de61b3cd8cb1424005ca9b2a033bd9ee360c09e

Authored by YangShuai
1 parent d0413a51

1 优化基类

2 优化mvp中view的判定
app/strike/src/main/AndroidManifest.xml
@@ -55,6 +55,8 @@ @@ -55,6 +55,8 @@
55 </activity> 55 </activity>
56 <activity android:name="com.cnlive.strike.demo.activity.DemoMvpActivity" /> 56 <activity android:name="com.cnlive.strike.demo.activity.DemoMvpActivity" />
57 57
  58 + <activity android:name="com.cnlive.strike.demo.activity.DemoBottomSheetActivity" />
  59 +
58 <meta-data 60 <meta-data
59 android:name="com.baidu.lbsapi.API_KEY" 61 android:name="com.baidu.lbsapi.API_KEY"
60 android:value="${BAIDU_MAP_APP_KEY}" 62 android:value="${BAIDU_MAP_APP_KEY}"
app/strike/src/main/java/com/cnlive/strike/demo/activity/DemoBottomSheetActivity.java 0 → 100644
  1 +package com.cnlive.strike.demo.activity;
  2 +
  3 +import android.view.View;
  4 +
  5 +import androidx.annotation.NonNull;
  6 +import androidx.databinding.ViewDataBinding;
  7 +
  8 +import com.cnlive.cloud.R;
  9 +import com.cnlive.cloud.databinding.ActivityDemoBottomSheetBinding;
  10 +import com.cnlive.core.libs.base.frame.activity.BaseActivity;
  11 +import com.google.android.material.bottomsheet.BottomSheetBehavior;
  12 +
  13 +public class DemoBottomSheetActivity extends BaseActivity {
  14 + private ActivityDemoBottomSheetBinding binding;
  15 + BottomSheetBehavior behavior;
  16 +
  17 + @Override
  18 + protected int getBindLayoutId() {
  19 + return R.layout.activity_demo_bottom_sheet;
  20 + }
  21 +
  22 + @Override
  23 + protected void initBindingLayoutData(ViewDataBinding baseBinding) {
  24 + binding = (ActivityDemoBottomSheetBinding) baseBinding;
  25 + }
  26 +
  27 + @Override
  28 + protected void initView() {
  29 + behavior = BottomSheetBehavior.from(binding.recyclerview);
  30 +
  31 + behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
  32 + @Override
  33 + public void onStateChanged(@NonNull View bottomSheet, @BottomSheetBehavior.State int newState) {
  34 + String state = "null";
  35 + switch (newState) {
  36 + case 1:
  37 + state = "STATE_DRAGGING";//过渡状态此时用户正在向上或者向下拖动bottom sheet
  38 + break;
  39 + case 2:
  40 + state = "STATE_SETTLING"; // 视图从脱离手指自由滑动到最终停下的这一小段时间
  41 + break;
  42 + case 3:
  43 + state = "STATE_EXPANDED"; //处于完全展开的状态
  44 +
  45 + break;
  46 + case 4:
  47 + state = "STATE_COLLAPSED"; //默认的折叠状态
  48 + break;
  49 + case 5:
  50 + state = "STATE_HIDDEN"; //下滑动完全隐藏 bottom sheet
  51 + break;
  52 + }
  53 +
  54 + }
  55 +
  56 + @Override
  57 + public void onSlide(@NonNull View view, float v) {
  58 +
  59 + }
  60 + });
  61 +
  62 + binding.btnTest.setOnClickListener(new View.OnClickListener() {
  63 + @Override
  64 + public void onClick(View v) {
  65 + behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
  66 + }
  67 + });
  68 +
  69 + binding.mapview.setOnClickListener(new View.OnClickListener() {
  70 + @Override
  71 + public void onClick(View v) {
  72 + if (!isNull(behavior))
  73 + behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
  74 +
  75 + }
  76 + });
  77 + }
  78 +}
  79 +
app/strike/src/main/java/com/cnlive/strike/demo/activity/DemoMvpActivity.java
@@ -44,6 +44,7 @@ import com.cnlive.strike.network.api.ApiTimeService; @@ -44,6 +44,7 @@ import com.cnlive.strike.network.api.ApiTimeService;
44 import com.cnlive.strike.network.api.TimeServiceBean; 44 import com.cnlive.strike.network.api.TimeServiceBean;
45 import com.cnlive.strike.network.api.VideoRequest; 45 import com.cnlive.strike.network.api.VideoRequest;
46 import com.cnlive.strike.network.bean.TestBean; 46 import com.cnlive.strike.network.bean.TestBean;
  47 +import com.google.android.material.bottomsheet.BottomSheetBehavior;
47 48
48 import org.greenrobot.eventbus.Subscribe; 49 import org.greenrobot.eventbus.Subscribe;
49 import org.greenrobot.eventbus.ThreadMode; 50 import org.greenrobot.eventbus.ThreadMode;
@@ -55,7 +56,6 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -55,7 +56,6 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
55 public ActivityDemoMvpMainBinding binding; 56 public ActivityDemoMvpMainBinding binding;
56 private String[] permission = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}; 57 private String[] permission = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
57 58
58 -  
59 @Override 59 @Override
60 protected void initBindingLayoutData(ViewDataBinding baseBinding) { 60 protected void initBindingLayoutData(ViewDataBinding baseBinding) {
61 binding = (ActivityDemoMvpMainBinding) baseBinding; 61 binding = (ActivityDemoMvpMainBinding) baseBinding;
@@ -67,10 +67,22 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -67,10 +67,22 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
67 return R.layout.activity_demo_mvp_main; 67 return R.layout.activity_demo_mvp_main;
68 } 68 }
69 69
  70 + @Override
  71 + protected int getViewLayoutId() {
  72 + return super.getViewLayoutId();
  73 + }
  74 +
70 75
71 @Override 76 @Override
72 protected void initView() { 77 protected void initView() {
73 - setStatusBarColor(R.color.red, 100, StatusBarConfig.BLACK); 78 + showDefaultWhiteStatusBar();
  79 + binding.btnBottomSheet.setOnClickListener(new View.OnClickListener() {
  80 + @Override
  81 + public void onClick(View v) {
  82 +
  83 + startActivity(new Intent(me, DemoBottomSheetActivity.class));
  84 + }
  85 + });
74 // //登录页 86 // //登录页
75 binding.btnLogin.setOnClickListener(new View.OnClickListener() { 87 binding.btnLogin.setOnClickListener(new View.OnClickListener() {
76 @Override 88 @Override
@@ -152,9 +164,9 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -152,9 +164,9 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
152 164
153 //二部电商首页 165 //二部电商首页
154 binding.btnShopcity.setOnClickListener(view -> { 166 binding.btnShopcity.setOnClickListener(view -> {
155 - AlertUtil.showDeftToast(DemoMvpActivity.this,"商城部分版本待升级适配"); 167 + AlertUtil.showDeftToast(DemoMvpActivity.this, "商城部分版本待升级适配");
156 // startActivity(new Intent(DemoMvpActivity.this, ShopHomeActivity.class)); 168 // startActivity(new Intent(DemoMvpActivity.this, ShopHomeActivity.class));
157 - }); 169 + });
158 170
159 //获取Handler,onDestory自动解除 171 //获取Handler,onDestory自动解除
160 binding.btnHandler.setOnClickListener(new View.OnClickListener() { 172 binding.btnHandler.setOnClickListener(new View.OnClickListener() {
@@ -369,7 +381,7 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -369,7 +381,7 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
369 381
370 @Override 382 @Override
371 public void onSuccess(TestBean data) { 383 public void onSuccess(TestBean data) {
372 - QMUITipDialogUtil.successDialog(me, "成功"+data.getResults().size()); 384 + QMUITipDialogUtil.successDialog(me, "成功" + data.getResults().size());
373 } 385 }
374 386
375 @Override 387 @Override
@@ -405,8 +417,8 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -405,8 +417,8 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
405 binding.btnCnPlayer.setOnClickListener(new View.OnClickListener() { 417 binding.btnCnPlayer.setOnClickListener(new View.OnClickListener() {
406 @Override 418 @Override
407 public void onClick(View v) { 419 public void onClick(View v) {
408 - Intent intent=new Intent(me,CNplayerActivity.class);  
409 - intent.putExtra("type","0"); 420 + Intent intent = new Intent(me, CNplayerActivity.class);
  421 + intent.putExtra("type", "0");
410 startActivity(intent); 422 startActivity(intent);
411 } 423 }
412 }); 424 });
@@ -418,14 +430,14 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -418,14 +430,14 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
418 // intent.putExtra("type","1"); 430 // intent.putExtra("type","1");
419 // startActivityForResult(intent,100); 431 // startActivityForResult(intent,100);
420 432
421 - ARouter.getInstance().build(CNplayerActivity.PATH).navigation(me,300); 433 + ARouter.getInstance().build(CNplayerActivity.PATH).navigation(me, 300);
422 434
423 } 435 }
424 }); 436 });
425 binding.btnExo.setOnClickListener(new View.OnClickListener() { 437 binding.btnExo.setOnClickListener(new View.OnClickListener() {
426 @Override 438 @Override
427 public void onClick(View v) { 439 public void onClick(View v) {
428 - Intent intent=new Intent(me,ExoPlayerActivity.class); 440 + Intent intent = new Intent(me, ExoPlayerActivity.class);
429 startActivity(intent); 441 startActivity(intent);
430 } 442 }
431 }); 443 });
@@ -439,9 +451,9 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity @@ -439,9 +451,9 @@ public class DemoMvpActivity extends BaseActivity&lt;DemoActivityView, DemoActivity
439 binding.btnUid.setOnClickListener(new View.OnClickListener() { 451 binding.btnUid.setOnClickListener(new View.OnClickListener() {
440 @Override 452 @Override
441 public void onClick(View v) { 453 public void onClick(View v) {
442 - CNLiveUserService userService= OpenServiceHelpUtil.getUserService(me);  
443 - if (null!=userService){  
444 - QMUITipDialogUtil.textDialog(me,userService.getUid(me)); 454 + CNLiveUserService userService = OpenServiceHelpUtil.getUserService(me);
  455 + if (null != userService) {
  456 + QMUITipDialogUtil.textDialog(me, userService.getUid(me));
445 } 457 }
446 } 458 }
447 }); 459 });
app/strike/src/main/res/layout/activity_demo_bottom_sheet.xml 0 → 100644
  1 +<layout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + xmlns:app="http://schemas.android.com/apk/res-auto">
  3 +
  4 + <androidx.coordinatorlayout.widget.CoordinatorLayout
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent">
  7 +
  8 + <LinearLayout
  9 + android:id="@+id/mapview"
  10 + android:background="@color/black"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent" />
  13 +
  14 + <Button
  15 + android:id="@+id/btnTest"
  16 + android:layout_width="wrap_content"
  17 + android:layout_height="wrap_content"
  18 + android:text="测试" />
  19 +
  20 + <LinearLayout
  21 + android:id="@+id/recyclerview"
  22 + android:layout_width="match_parent"
  23 + android:layout_height="500dp"
  24 + android:background="@color/white"
  25 + android:clickable="true"
  26 + android:focusable="true"
  27 + app:behavior_hideable="true"
  28 + app:behavior_peekHeight="0dp"
  29 + app:layout_behavior="@string/bottom_sheet_behavior" ></LinearLayout>
  30 + </androidx.coordinatorlayout.widget.CoordinatorLayout>
  31 +</layout>
0 \ No newline at end of file 32 \ No newline at end of file
app/strike/src/main/res/layout/activity_demo_mvp_main.xml
@@ -16,6 +16,13 @@ @@ -16,6 +16,13 @@
16 android:orientation="vertical"> 16 android:orientation="vertical">
17 17
18 <Button 18 <Button
  19 + android:id="@+id/btn_BottomSheet"
  20 + android:layout_width="match_parent"
  21 + android:layout_height="wrap_content"
  22 + android:layout_margin="5dp"
  23 + android:text="BottomSheet" />
  24 +
  25 + <Button
19 android:id="@+id/btn_login" 26 android:id="@+id/btn_login"
20 android:layout_width="match_parent" 27 android:layout_width="match_parent"
21 android:layout_height="wrap_content" 28 android:layout_height="wrap_content"
@@ -33,7 +40,7 @@ @@ -33,7 +40,7 @@
33 android:id="@+id/btn_login_bingding" 40 android:id="@+id/btn_login_bingding"
34 android:layout_width="match_parent" 41 android:layout_width="match_parent"
35 android:layout_height="wrap_content" 42 android:layout_height="wrap_content"
36 - android:text="账号三方绑定管理"/> 43 + android:text="账号三方绑定管理" />
37 44
38 <Button 45 <Button
39 android:id="@+id/btn_new_user_face" 46 android:id="@+id/btn_new_user_face"
@@ -139,12 +146,14 @@ @@ -139,12 +146,14 @@
139 android:layout_height="wrap_content" 146 android:layout_height="wrap_content"
140 android:layout_margin="5dp" 147 android:layout_margin="5dp"
141 android:text="Exoplayer" /> 148 android:text="Exoplayer" />
  149 +
142 <Button 150 <Button
143 android:id="@+id/btn_exo_home" 151 android:id="@+id/btn_exo_home"
144 android:layout_width="match_parent" 152 android:layout_width="match_parent"
145 android:layout_height="wrap_content" 153 android:layout_height="wrap_content"
146 android:layout_margin="5dp" 154 android:layout_margin="5dp"
147 android:text="Exoplayer官方" /> 155 android:text="Exoplayer官方" />
  156 +
148 <Button 157 <Button
149 android:id="@+id/btn_pay" 158 android:id="@+id/btn_pay"
150 android:layout_width="match_parent" 159 android:layout_width="match_parent"
@@ -221,6 +230,8 @@ @@ -221,6 +230,8 @@
221 android:layout_height="wrap_content" 230 android:layout_height="wrap_content"
222 android:layout_margin="5dp" 231 android:layout_margin="5dp"
223 android:text="默认权限申请,自定义申请码,自定义提示语" /> 232 android:text="默认权限申请,自定义申请码,自定义提示语" />
  233 +
  234 +
224 </LinearLayout> 235 </LinearLayout>
225 </androidx.core.widget.NestedScrollView> 236 </androidx.core.widget.NestedScrollView>
226 </LinearLayout> 237 </LinearLayout>
core/base/src/main/java/com/cnlive/core/libs/base/frame/activity/BaseActivity.java
@@ -51,6 +51,7 @@ import com.cnlive.core.libs.base.util.StatusBarConfig; @@ -51,6 +51,7 @@ import com.cnlive.core.libs.base.util.StatusBarConfig;
51 import com.cnlive.core.libs.base.util.StatusBarUtil; 51 import com.cnlive.core.libs.base.util.StatusBarUtil;
52 import com.cnlive.cloud.base.R; 52 import com.cnlive.cloud.base.R;
53 import com.hannesdorfmann.mosby3.mvp.MvpActivity; 53 import com.hannesdorfmann.mosby3.mvp.MvpActivity;
  54 +import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
54 import com.me.yokeyword.fragmentation.ExtraTransaction; 55 import com.me.yokeyword.fragmentation.ExtraTransaction;
55 import com.me.yokeyword.fragmentation.Fragmentation; 56 import com.me.yokeyword.fragmentation.Fragmentation;
56 import com.me.yokeyword.fragmentation.ISupportActivity; 57 import com.me.yokeyword.fragmentation.ISupportActivity;
@@ -514,7 +515,12 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -514,7 +515,12 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
514 AppManager.getInstance().deleteActivity(me); 515 AppManager.getInstance().deleteActivity(me);
515 //清除当前订阅 516 //清除当前订阅
516 SubscriptionManager.getInstance().cancel(TAG); 517 SubscriptionManager.getInstance().cancel(TAG);
517 - 518 + if (null != getPresenter()) {
  519 + getPresenter().onDestory();
  520 + }
  521 + if (null != getMvpView()) {
  522 + getMvpView().onDestory();
  523 + }
518 } 524 }
519 525
520 /** 526 /**
@@ -587,6 +593,26 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -587,6 +593,26 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
587 return view; 593 return view;
588 } 594 }
589 595
  596 + /**
  597 + * 判断view是否已经附加
  598 + *
  599 + * @return
  600 + */
  601 + public boolean isViewAttached() {
  602 + return view != null;
  603 + }
  604 +
  605 + /**
  606 + * 直接调用view的方法
  607 + *
  608 + * @param action
  609 + */
  610 + protected final void ifViewAttached(MvpBasePresenter.ViewAction<V> action) {
  611 + if (view != null) {
  612 + action.run(view);
  613 + }
  614 + }
  615 +
590 protected int getBindLayoutId() { 616 protected int getBindLayoutId() {
591 return 0; 617 return 0;
592 } 618 }
@@ -1456,14 +1482,14 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -1456,14 +1482,14 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
1456 } 1482 }
1457 1483
1458 /** 1484 /**
1459 - * It is recommended to use {@link SupportFragment#start(ISupportFragment)}. 1485 + * It is recommended to use { SupportFragment#start(ISupportFragment)}.
1460 */ 1486 */
1461 public final void start(ISupportFragment toFragment) { 1487 public final void start(ISupportFragment toFragment) {
1462 mDelegate.start(toFragment); 1488 mDelegate.start(toFragment);
1463 } 1489 }
1464 1490
1465 /** 1491 /**
1466 - * It is recommended to use {@link SupportFragment#start(ISupportFragment, int)}. 1492 + * It is recommended to use {SupportFragment#start(ISupportFragment, int)}.
1467 * 1493 *
1468 * @param launchMode Similar to Activity's LaunchMode. 1494 * @param launchMode Similar to Activity's LaunchMode.
1469 */ 1495 */
@@ -1472,7 +1498,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -1472,7 +1498,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
1472 } 1498 }
1473 1499
1474 /** 1500 /**
1475 - * It is recommended to use {@link SupportFragment#startForResult(ISupportFragment, int)}. 1501 + * It is recommended to use {SupportFragment#startForResult(ISupportFragment, int)}.
1476 * Launch an fragment for which you would like a result when it poped. 1502 * Launch an fragment for which you would like a result when it poped.
1477 */ 1503 */
1478 public final void startForResult(ISupportFragment toFragment, int requestCode) { 1504 public final void startForResult(ISupportFragment toFragment, int requestCode) {
@@ -1480,7 +1506,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -1480,7 +1506,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
1480 } 1506 }
1481 1507
1482 /** 1508 /**
1483 - * It is recommended to use {@link SupportFragment#startWithPop(ISupportFragment)}. 1509 + * It is recommended to use { SupportFragment#startWithPop(ISupportFragment)}.
1484 * Start the target Fragment and pop itself 1510 * Start the target Fragment and pop itself
1485 */ 1511 */
1486 public final void startWithPop(ISupportFragment toFragment) { 1512 public final void startWithPop(ISupportFragment toFragment) {
@@ -1488,7 +1514,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -1488,7 +1514,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
1488 } 1514 }
1489 1515
1490 /** 1516 /**
1491 - * It is recommended to use {@link SupportFragment#startWithPopTo(ISupportFragment, Class, boolean)}. 1517 + * It is recommended to use {SupportFragment#startWithPopTo(ISupportFragment, Class, boolean)}.
1492 * 1518 *
1493 * @see #popTo(Class, boolean) 1519 * @see #popTo(Class, boolean)
1494 * + 1520 * +
@@ -1499,7 +1525,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -1499,7 +1525,7 @@ public abstract class BaseActivity&lt;V extends BaseView, P extends BasePresenter&lt;V
1499 } 1525 }
1500 1526
1501 /** 1527 /**
1502 - * It is recommended to use {@link SupportFragment#replaceFragment(ISupportFragment, boolean)}. 1528 + * It is recommended to use {link SupportFragment#replaceFragment(ISupportFragment, boolean)}.
1503 */ 1529 */
1504 public final void replaceFragment(ISupportFragment toFragment, boolean addToBackStack) { 1530 public final void replaceFragment(ISupportFragment toFragment, boolean addToBackStack) {
1505 mDelegate.replaceFragment(toFragment, addToBackStack); 1531 mDelegate.replaceFragment(toFragment, addToBackStack);
core/base/src/main/java/com/cnlive/core/libs/base/frame/fragment/BaseFragment.java
@@ -29,6 +29,7 @@ import com.cnlive.core.libs.base.util.ReflectUtil; @@ -29,6 +29,7 @@ import com.cnlive.core.libs.base.util.ReflectUtil;
29 import com.cnlive.core.libs.base.frame.view.BaseView; 29 import com.cnlive.core.libs.base.frame.view.BaseView;
30 import com.cnlive.core.libs.base.util.StatusBarConfig; 30 import com.cnlive.core.libs.base.util.StatusBarConfig;
31 import com.cnlive.cloud.base.R; 31 import com.cnlive.cloud.base.R;
  32 +import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
32 import com.me.yokeyword.fragmentation.ExtraTransaction; 33 import com.me.yokeyword.fragmentation.ExtraTransaction;
33 import com.me.yokeyword.fragmentation.ISupportFragment; 34 import com.me.yokeyword.fragmentation.ISupportFragment;
34 import com.me.yokeyword.fragmentation.SupportFragmentDelegate; 35 import com.me.yokeyword.fragmentation.SupportFragmentDelegate;
@@ -77,7 +78,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -77,7 +78,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
77 } 78 }
78 79
79 @Override 80 @Override
80 - public void onCreate(Bundle savedInstanceState) { 81 + public void onCreate(Bundle savedInstanceState) {
81 super.onCreate(savedInstanceState); 82 super.onCreate(savedInstanceState);
82 if (getActivity() == null) return; 83 if (getActivity() == null) return;
83 me = (BaseActivity) getActivity(); 84 me = (BaseActivity) getActivity();
@@ -92,14 +93,14 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -92,14 +93,14 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
92 setSwipeBackEnable(me.isOpenSwipBack()); 93 setSwipeBackEnable(me.isOpenSwipBack());
93 ARouter.getInstance().inject(this); 94 ARouter.getInstance().inject(this);
94 init(savedInstanceState); 95 init(savedInstanceState);
95 - if (null!=getArguments()){ 96 + if (null != getArguments()) {
96 initParams(getArguments()); 97 initParams(getArguments());
97 } 98 }
98 } 99 }
99 100
100 @Nullable 101 @Nullable
101 @Override 102 @Override
102 - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 103 + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
103 if (0 != getBindLayoutId()) { 104 if (0 != getBindLayoutId()) {
104 baseBinding = DataBindingUtil.inflate(inflater, getBindLayoutId(), container, false); 105 baseBinding = DataBindingUtil.inflate(inflater, getBindLayoutId(), container, false);
105 if (me.isOpenSwipBack()) { 106 if (me.isOpenSwipBack()) {
@@ -130,21 +131,21 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -130,21 +131,21 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
130 } 131 }
131 132
132 133
133 - public boolean isNull(Object o) { 134 + public boolean isNull(Object o) {
134 return me.isNull(o); 135 return me.isNull(o);
135 } 136 }
136 137
137 /** 138 /**
138 * 显示白色通知栏 139 * 显示白色通知栏
139 */ 140 */
140 - public void showDefaultWhiteStatusBar() { 141 + public void showDefaultWhiteStatusBar() {
141 me.showDefaultWhiteStatusBar(); 142 me.showDefaultWhiteStatusBar();
142 } 143 }
143 144
144 /** 145 /**
145 * 显示黑色通知栏 146 * 显示黑色通知栏
146 */ 147 */
147 - public void showDefaultBlackStatusBar() { 148 + public void showDefaultBlackStatusBar() {
148 me.showDefaultBlackStatusBar(); 149 me.showDefaultBlackStatusBar();
149 } 150 }
150 151
@@ -153,12 +154,12 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -153,12 +154,12 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
153 * 154 *
154 * @param enable 155 * @param enable
155 */ 156 */
156 - public void setEnableCreateDefultEmptyView(boolean enable) { 157 + public void setEnableCreateDefultEmptyView(boolean enable) {
157 isCreateDefultEmptyView = enable; 158 isCreateDefultEmptyView = enable;
158 } 159 }
159 160
160 @Override 161 @Override
161 - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 162 + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
162 super.onViewCreated(view, savedInstanceState); 163 super.onViewCreated(view, savedInstanceState);
163 mSwipeDelegate.onViewCreated(view, savedInstanceState); 164 mSwipeDelegate.onViewCreated(view, savedInstanceState);
164 if (null != getMvpView() && null != getPresenter()) { 165 if (null != getMvpView() && null != getPresenter()) {
@@ -192,12 +193,33 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -192,12 +193,33 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
192 return view; 193 return view;
193 } 194 }
194 195
195 - public Bundle getSavedInstanceState() { 196 +
  197 + /**
  198 + * 判断view是否已经附加
  199 + *
  200 + * @return
  201 + */
  202 + public boolean isViewAttached() {
  203 + return view != null;
  204 + }
  205 +
  206 + /**
  207 + * 直接调用view的方法
  208 + *
  209 + * @param action
  210 + */
  211 + protected final void ifViewAttached(MvpBasePresenter.ViewAction<V> action) {
  212 + if (view != null) {
  213 + action.run(view);
  214 + }
  215 + }
  216 +
  217 + public Bundle getSavedInstanceState() {
196 return savedInstanceState; 218 return savedInstanceState;
197 } 219 }
198 220
199 //添加观察者 221 //添加观察者
200 - public void addObservable(Observable... observable) { 222 + public void addObservable(Observable... observable) {
201 Observable[] result = observable; 223 Observable[] result = observable;
202 if (null != observable) { 224 if (null != observable) {
203 if (null != result) { 225 if (null != result) {
@@ -229,7 +251,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -229,7 +251,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
229 } 251 }
230 } 252 }
231 253
232 - public void registerEventBus() { 254 + public void registerEventBus() {
233 //注册eventbus 255 //注册eventbus
234 if (!EventBus.getDefault().isRegistered(this)) { 256 if (!EventBus.getDefault().isRegistered(this)) {
235 EventBus.getDefault().register(this); 257 EventBus.getDefault().register(this);
@@ -243,15 +265,15 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -243,15 +265,15 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
243 } 265 }
244 } 266 }
245 267
246 - public void postEvent(Object object) { 268 + public void postEvent(Object object) {
247 EventBus.getDefault().post(object); 269 EventBus.getDefault().post(object);
248 } 270 }
249 271
250 - public void postStickyEvent(Object object) { 272 + public void postStickyEvent(Object object) {
251 EventBus.getDefault().postSticky(object); 273 EventBus.getDefault().postSticky(object);
252 } 274 }
253 275
254 - public Handler getMyFragHandler() { 276 + public Handler getMyFragHandler() {
255 if (null == myFragHandler) { 277 if (null == myFragHandler) {
256 myFragHandler = new Handler() { 278 myFragHandler = new Handler() {
257 @Override 279 @Override
@@ -335,7 +357,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -335,7 +357,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
335 /** 357 /**
336 * 隐藏软键盘 358 * 隐藏软键盘
337 */ 359 */
338 - public void hideSoftInput() { 360 + public void hideSoftInput() {
339 me.hideSoftInput(); 361 me.hideSoftInput();
340 } 362 }
341 363
@@ -343,14 +365,14 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -343,14 +365,14 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
343 /** 365 /**
344 * 显示竖屏 366 * 显示竖屏
345 */ 367 */
346 - public void showPortraitScreen() { 368 + public void showPortraitScreen() {
347 me.showPortraitScreen(); 369 me.showPortraitScreen();
348 } 370 }
349 371
350 /** 372 /**
351 * 显示横屏 373 * 显示横屏
352 */ 374 */
353 - public void showLandscapeScreen() { 375 + public void showLandscapeScreen() {
354 me.showLandscapeScreen(); 376 me.showLandscapeScreen();
355 } 377 }
356 378
@@ -360,8 +382,8 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -360,8 +382,8 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
360 * @param color 382 * @param color
361 * @param statusBarAlpha 383 * @param statusBarAlpha
362 */ 384 */
363 - public void setStatusBarColor(@ColorRes int color,  
364 - @IntRange(from = 0, to = 255) int statusBarAlpha) { 385 + public void setStatusBarColor(@ColorRes int color,
  386 + @IntRange(from = 0, to = 255) int statusBarAlpha) {
365 me.setStatusBarColor(color, statusBarAlpha); 387 me.setStatusBarColor(color, statusBarAlpha);
366 } 388 }
367 389
@@ -371,20 +393,20 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -371,20 +393,20 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
371 * @param color 393 * @param color
372 * @param statusBarAlpha 394 * @param statusBarAlpha
373 */ 395 */
374 - public void setStatusBarColor(@ColorRes int color,  
375 - @IntRange(from = 0, to = 255) int statusBarAlpha, @StatusBarConfig.Unit final int textColor) { 396 + public void setStatusBarColor(@ColorRes int color,
  397 + @IntRange(from = 0, to = 255) int statusBarAlpha, @StatusBarConfig.Unit final int textColor) {
376 me.setStatusBarColor(color, statusBarAlpha, textColor); 398 me.setStatusBarColor(color, statusBarAlpha, textColor);
377 } 399 }
378 400
379 - public void setTransparentForWindow() { 401 + public void setTransparentForWindow() {
380 me.setTransparentForWindow(); 402 me.setTransparentForWindow();
381 } 403 }
382 404
383 - public void addTranslucentView(@IntRange(from = 0, to = 255) int statusBarAlpha) { 405 + public void addTranslucentView(@IntRange(from = 0, to = 255) int statusBarAlpha) {
384 me.addTranslucentView(statusBarAlpha); 406 me.addTranslucentView(statusBarAlpha);
385 } 407 }
386 408
387 - public void setDecorViewBgColor(@ColorInt int color) { 409 + public void setDecorViewBgColor(@ColorInt int color) {
388 me.setDecorViewBgColor(color); 410 me.setDecorViewBgColor(color);
389 } 411 }
390 412
@@ -403,12 +425,18 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -403,12 +425,18 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
403 mSwipeDelegate.onDestroyView(); 425 mSwipeDelegate.onDestroyView();
404 //清除当前订阅 426 //清除当前订阅
405 SubscriptionManager.getInstance().cancel(TAG); 427 SubscriptionManager.getInstance().cancel(TAG);
  428 + if (null != getPresenter()) {
  429 + getPresenter().onDestory();
  430 + }
  431 + if (null != getMvpView()) {
  432 + getMvpView().onDestory();
  433 + }
406 } 434 }
407 435
408 /** 436 /**
409 * 设置状态栏字体颜色 437 * 设置状态栏字体颜色
410 */ 438 */
411 - public void setStatusBarTextColor(@StatusBarConfig.Unit int type) { 439 + public void setStatusBarTextColor(@StatusBarConfig.Unit int type) {
412 me.setStatusBarTextColor(type); 440 me.setStatusBarTextColor(type);
413 } 441 }
414 442
@@ -416,14 +444,14 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -416,14 +444,14 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
416 /** 444 /**
417 * 显示软键盘 445 * 显示软键盘
418 */ 446 */
419 - public void showSoftInput() { 447 + public void showSoftInput() {
420 me.showSoftInput(); 448 me.showSoftInput();
421 } 449 }
422 450
423 /** 451 /**
424 * 显示软键盘 452 * 显示软键盘
425 */ 453 */
426 - public void showSoftInput(View view) { 454 + public void showSoftInput(View view) {
427 me.showSoftInput(view); 455 me.showSoftInput(view);
428 } 456 }
429 457
@@ -431,7 +459,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -431,7 +459,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
431 * 设置屏幕为横屏 459 * 设置屏幕为横屏
432 * Set the screen to landscape. 460 * Set the screen to landscape.
433 */ 461 */
434 - public void setLandscape() { 462 + public void setLandscape() {
435 me.setLandscape(); 463 me.setLandscape();
436 } 464 }
437 465
@@ -439,7 +467,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -439,7 +467,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
439 * 设置屏幕为竖屏 467 * 设置屏幕为竖屏
440 * Set the screen to portrait. 468 * Set the screen to portrait.
441 */ 469 */
442 - public void setPortrait() { 470 + public void setPortrait() {
443 me.setPortrait(); 471 me.setPortrait();
444 } 472 }
445 473
@@ -450,7 +478,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -450,7 +478,7 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
450 * 478 *
451 * @return {@code true}: yes<br>{@code false}: no 479 * @return {@code true}: yes<br>{@code false}: no
452 */ 480 */
453 - public boolean isLandscape() { 481 + public boolean isLandscape() {
454 return me.isLandscape(); 482 return me.isLandscape();
455 } 483 }
456 484
@@ -460,123 +488,123 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -460,123 +488,123 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
460 * 488 *
461 * @return {@code true}: yes<br>{@code false}: no 489 * @return {@code true}: yes<br>{@code false}: no
462 */ 490 */
463 - public boolean isPortrait() { 491 + public boolean isPortrait() {
464 return me.isPortrait(); 492 return me.isPortrait();
465 } 493 }
466 494
467 495
468 /*********************************************************/ 496 /*********************************************************/
469 //用于进行dip和px转换 497 //用于进行dip和px转换
470 - public int dp2px(float dpValue) { 498 + public int dp2px(float dpValue) {
471 return me.dp2px(dpValue); 499 return me.dp2px(dpValue);
472 } 500 }
473 501
474 //用于进行px和dip转换 502 //用于进行px和dip转换
475 - public int px2dp(float pxValue) { 503 + public int px2dp(float pxValue) {
476 return me.px2dp(pxValue); 504 return me.px2dp(pxValue);
477 } 505 }
478 506
479 //权限申请 507 //权限申请
480 - public void requestPermission(String[] permissions, OnPermissionResponseListener onPermissionResponseListener) { 508 + public void requestPermission(String[] permissions, OnPermissionResponseListener onPermissionResponseListener) {
481 me.requestPermission(permissions, onPermissionResponseListener); 509 me.requestPermission(permissions, onPermissionResponseListener);
482 } 510 }
483 511
484 - public void requestPermission(String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 512 + public void requestPermission(String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
485 me.requestPermission(permissions, isShowRefuseDialog, onPermissionResponseListener); 513 me.requestPermission(permissions, isShowRefuseDialog, onPermissionResponseListener);
486 } 514 }
487 515
488 //权限申请 516 //权限申请
489 - public void requestPermission(boolean isDefineActivity, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) { 517 + public void requestPermission(boolean isDefineActivity, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) {
490 me.requestPermission(isDefineActivity, permissions, onPermissionResponseListener); 518 me.requestPermission(isDefineActivity, permissions, onPermissionResponseListener);
491 } 519 }
492 520
493 - public void requestPermission(boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 521 + public void requestPermission(boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
494 me.requestPermission(isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener); 522 me.requestPermission(isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener);
495 } 523 }
496 524
497 //权限申请 525 //权限申请
498 - public void requestPermission(int requestCode, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) { 526 + public void requestPermission(int requestCode, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) {
499 me.requestPermission(requestCode, permissions, onPermissionResponseListener); 527 me.requestPermission(requestCode, permissions, onPermissionResponseListener);
500 } 528 }
501 529
502 - public void requestPermission(int requestCode, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 530 + public void requestPermission(int requestCode, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
503 me.requestPermission(requestCode, permissions, isShowRefuseDialog, onPermissionResponseListener); 531 me.requestPermission(requestCode, permissions, isShowRefuseDialog, onPermissionResponseListener);
504 } 532 }
505 533
506 //权限申请 534 //权限申请
507 - public void requestPermission(int requestCode, boolean isDefineActivity, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) { 535 + public void requestPermission(int requestCode, boolean isDefineActivity, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) {
508 me.requestPermission(requestCode, isDefineActivity, permissions, onPermissionResponseListener); 536 me.requestPermission(requestCode, isDefineActivity, permissions, onPermissionResponseListener);
509 } 537 }
510 538
511 - public void requestPermission(int requestCode, boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 539 + public void requestPermission(int requestCode, boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
512 me.requestPermission(requestCode, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener); 540 me.requestPermission(requestCode, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener);
513 } 541 }
514 542
515 //权限申请 543 //权限申请
516 - public void requestPermission(int requestCode, String defineTip, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) { 544 + public void requestPermission(int requestCode, String defineTip, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) {
517 me.requestPermission(requestCode, defineTip, permissions, onPermissionResponseListener); 545 me.requestPermission(requestCode, defineTip, permissions, onPermissionResponseListener);
518 } 546 }
519 547
520 - public void requestPermission(int requestCode, String defineTip, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 548 + public void requestPermission(int requestCode, String defineTip, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
521 me.requestPermission(requestCode, defineTip, permissions, isShowRefuseDialog, onPermissionResponseListener); 549 me.requestPermission(requestCode, defineTip, permissions, isShowRefuseDialog, onPermissionResponseListener);
522 } 550 }
523 551
524 //权限申请 552 //权限申请
525 - public void requestPermission(int requestCode, String defineTip, boolean isDefineActivity, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) { 553 + public void requestPermission(int requestCode, String defineTip, boolean isDefineActivity, String[] permissions, OnPermissionResponseListener onPermissionResponseListener) {
526 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, onPermissionResponseListener); 554 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, onPermissionResponseListener);
527 } 555 }
528 556
529 - public void requestPermission(int requestCode, String defineTip, boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 557 + public void requestPermission(int requestCode, String defineTip, boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
530 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener); 558 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener);
531 } 559 }
532 560
533 - public void requestPermission(String defineTip, String[] permissions, OnPermissionResponseListener 561 + public void requestPermission(String defineTip, String[] permissions, OnPermissionResponseListener
534 onPermissionResponseListener) { 562 onPermissionResponseListener) {
535 me.requestPermission(defineTip, permissions, onPermissionResponseListener); 563 me.requestPermission(defineTip, permissions, onPermissionResponseListener);
536 } 564 }
537 565
538 - public void requestPermission(String defineTip, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener 566 + public void requestPermission(String defineTip, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener
539 onPermissionResponseListener) { 567 onPermissionResponseListener) {
540 me.requestPermission(defineTip, permissions, isShowRefuseDialog, onPermissionResponseListener); 568 me.requestPermission(defineTip, permissions, isShowRefuseDialog, onPermissionResponseListener);
541 } 569 }
542 570
543 - public void requestPermission(String defineTip, boolean isDefineActivity, String[] permissions, OnPermissionResponseListener 571 + public void requestPermission(String defineTip, boolean isDefineActivity, String[] permissions, OnPermissionResponseListener
544 onPermissionResponseListener) { 572 onPermissionResponseListener) {
545 me.requestPermission(defineTip, isDefineActivity, permissions, onPermissionResponseListener); 573 me.requestPermission(defineTip, isDefineActivity, permissions, onPermissionResponseListener);
546 } 574 }
547 575
548 - public void requestPermission(String defineTip, boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener 576 + public void requestPermission(String defineTip, boolean isDefineActivity, String[] permissions, boolean isShowRefuseDialog, OnPermissionResponseListener
549 onPermissionResponseListener) { 577 onPermissionResponseListener) {
550 me.requestPermission(defineTip, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener); 578 me.requestPermission(defineTip, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener);
551 } 579 }
552 580
553 - public void requestPermission(int requestCode, @StringRes int defineTip, String[] 581 + public void requestPermission(int requestCode, @StringRes int defineTip, String[]
554 permissions, OnPermissionResponseListener onPermissionResponseListener) { 582 permissions, OnPermissionResponseListener onPermissionResponseListener) {
555 me.requestPermission(requestCode, defineTip, permissions, onPermissionResponseListener); 583 me.requestPermission(requestCode, defineTip, permissions, onPermissionResponseListener);
556 } 584 }
557 585
558 - public void requestPermission(int requestCode, @StringRes int defineTip, String[] 586 + public void requestPermission(int requestCode, @StringRes int defineTip, String[]
559 permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 587 permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
560 me.requestPermission(requestCode, defineTip, permissions, isShowRefuseDialog, onPermissionResponseListener); 588 me.requestPermission(requestCode, defineTip, permissions, isShowRefuseDialog, onPermissionResponseListener);
561 } 589 }
562 590
563 - public void requestPermission(int requestCode, @StringRes int defineTip, boolean isDefineActivity, String[] 591 + public void requestPermission(int requestCode, @StringRes int defineTip, boolean isDefineActivity, String[]
564 permissions, OnPermissionResponseListener onPermissionResponseListener) { 592 permissions, OnPermissionResponseListener onPermissionResponseListener) {
565 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, onPermissionResponseListener); 593 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, onPermissionResponseListener);
566 } 594 }
567 595
568 - public void requestPermission(int requestCode, @StringRes int defineTip, boolean isDefineActivity, String[] 596 + public void requestPermission(int requestCode, @StringRes int defineTip, boolean isDefineActivity, String[]
569 permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) { 597 permissions, boolean isShowRefuseDialog, OnPermissionResponseListener onPermissionResponseListener) {
570 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener); 598 me.requestPermission(requestCode, defineTip, isDefineActivity, permissions, isShowRefuseDialog, onPermissionResponseListener);
571 } 599 }
572 600
573 //多权限检查 601 //多权限检查
574 - public boolean checkPermissions(String[] permissions) { 602 + public boolean checkPermissions(String[] permissions) {
575 return me.checkPermissions(permissions); 603 return me.checkPermissions(permissions);
576 } 604 }
577 605
578 //单权限检查 606 //单权限检查
579 - public boolean checkPermissions(String permission) { 607 + public boolean checkPermissions(String permission) {
580 return me.checkPermissions(permission); 608 return me.checkPermissions(permission);
581 } 609 }
582 610
@@ -642,6 +670,12 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -642,6 +670,12 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
642 unRegisterEventBus(); 670 unRegisterEventBus();
643 //清除当前订阅 671 //清除当前订阅
644 SubscriptionManager.getInstance().cancel(TAG); 672 SubscriptionManager.getInstance().cancel(TAG);
  673 + if (null != getMvpView()) {
  674 + getMvpView().onDestory();
  675 + }
  676 + if (null != getPresenter()) {
  677 + getPresenter().onDestory();
  678 + }
645 } 679 }
646 680
647 @Override 681 @Override
@@ -818,9 +852,9 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -818,9 +852,9 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
818 } 852 }
819 853
820 /** 854 /**
821 - * 类似 {@link Activity#onActivityResult(int, int, Intent)} 855 + * 类似 {link Activity#onActivityResult(int, int, Intent)}
822 * <p> 856 * <p>
823 - * Similar to {@link Activity#onActivityResult(int, int, Intent)} 857 + * Similar to {link Activity#onActivityResult(int, int, Intent)}
824 * 858 *
825 * @see #startForResult(ISupportFragment, int) 859 * @see #startForResult(ISupportFragment, int)
826 */ 860 */
@@ -831,9 +865,9 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V @@ -831,9 +865,9 @@ public abstract class BaseFragment&lt;V extends BaseView, P extends BasePresenter&lt;V
831 865
832 /** 866 /**
833 * 在start(TargetFragment,LaunchMode)时,启动模式为SingleTask/SingleTop, 回调TargetFragment的该方法 867 * 在start(TargetFragment,LaunchMode)时,启动模式为SingleTask/SingleTop, 回调TargetFragment的该方法
834 - * 类似 {@link Activity#onNewIntent(Intent)} 868 + * 类似 {link Activity#onNewIntent(Intent)}
835 * <p> 869 * <p>
836 - * Similar to {@link Activity#onNewIntent(Intent)} 870 + * Similar to {link Activity#onNewIntent(Intent)}
837 * 871 *
838 * @param args putNewBundle(Bundle newBundle) 872 * @param args putNewBundle(Bundle newBundle)
839 * @see #start(ISupportFragment, int) 873 * @see #start(ISupportFragment, int)
core/base/src/main/java/com/cnlive/core/libs/base/frame/presenter/BasePresenter.java
@@ -63,4 +63,16 @@ public class BasePresenter&lt;V extends BaseView&gt; extends MvpBasePresenter&lt;V&gt; { @@ -63,4 +63,16 @@ public class BasePresenter&lt;V extends BaseView&gt; extends MvpBasePresenter&lt;V&gt; {
63 public void logXml(String xml) { 63 public void logXml(String xml) {
64 Logger.xml(xml); 64 Logger.xml(xml);
65 } 65 }
  66 +
  67 + public void onDestory(){};
  68 +
  69 + @Override
  70 + public boolean isViewAttached() {
  71 + return super.isViewAttached();
  72 + }
  73 +
  74 + @Override
  75 + public V getView() {
  76 + return super.getView();
  77 + }
66 } 78 }
core/base/src/main/java/com/cnlive/core/libs/base/frame/view/BaseView.java
@@ -78,4 +78,6 @@ public class BaseView implements MvpView { @@ -78,4 +78,6 @@ public class BaseView implements MvpView {
78 public void logXml(String xml) { 78 public void logXml(String xml) {
79 Logger.xml(xml); 79 Logger.xml(xml);
80 } 80 }
  81 +
  82 + public void onDestory(){};
81 } 83 }