最全BaseActivity 基类封装

Fragment与Activity相辅相成所以我们把Fragment管理全加入到BaseActivity

  1. import android.app.Activity;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.support.annotation.Nullable;
  6. import android.support.v4.app.FragmentManager;
  7. import android.support.v4.app.FragmentTransaction;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.util.Log;
  10. import android.view.KeyEvent;
  11. import net.lililearn.baseproject.R;
  12. import net.lililearn.baseproject.utils.ActivityStackManager;
  13. import net.lililearn.baseproject.utils.ScreenManager;
  14. import java.util.ArrayList;
  15. public abstract class BaseActivity extends AppCompatActivity {
  16. private static final String TAG = "BaseActivity";
  17. /**
  18. * 是否沉浸状态栏
  19. **/
  20. private boolean isStatusBar = true;
  21. /**
  22. * 是否允许全屏
  23. **/
  24. private boolean isFullScreen = true;
  25. /**
  26. * 是否禁止旋转屏幕
  27. **/
  28. private boolean isScreenRoate = false;
  29. /**
  30. * context
  31. **/
  32. protected Context ctx;
  33. /**
  34. * 是否输出日志信息
  35. **/
  36. private boolean isDebug;
  37. private final int container = R.id.container;
  38. /**
  39. * 初始化界面
  40. **/
  41. protected abstract void initView();
  42. /**
  43. * 初始化数据
  44. */
  45. protected abstract void initData();
  46. /**
  47. * 绑定事件
  48. */
  49. protected abstract void setEvent();
  50. private ScreenManager screenManager;
  51. private ArrayList<BaseFragment> fragments;// back fragment list.
  52. private BaseFragment fragment;// current fragment.
  53. @Override
  54. protected void onCreate(@Nullable Bundle savedInstanceState) {
  55. super.onCreate(savedInstanceState);
  56. Log.i(TAG, "--->onCreate()");
  57. initView();
  58. initData();
  59. setEvent();
  60. ctx = this;
  61. ActivityStackManager.getInstance().pushActivity(this);
  62. screenManager = ScreenManager.getInstance();
  63. screenManager.setStatusBar(isStatusBar, this);
  64. // screenManager.setScreenRoate(isScreenRoate, this);
  65. screenManager.setFullScreen(isFullScreen, this);
  66. }
  67. public ArrayList<BaseFragment> getFragments() {
  68. return fragments;
  69. }
  70. /**
  71. * replace the current fragment.
  72. *
  73. * @param fragment the new fragment to shown.
  74. * @param addToBackStack if it can back.
  75. */
  76. public void addContent(BaseFragment fragment, boolean addToBackStack) {
  77. initFragments();
  78. FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  79. ft.add(container, fragment);
  80. if (addToBackStack) {
  81. ft.addToBackStack(null);
  82. } else {
  83. removePrevious();
  84. }
  85. ft.commitAllowingStateLoss();
  86. getSupportFragmentManager().executePendingTransactions();
  87. fragments.add(fragment);
  88. setFragment();
  89. }
  90. // use replace method to show fragment.
  91. public void replaceContent(BaseFragment fragment, boolean addToBackStack) {
  92. initFragments();
  93. FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  94. ft.replace(container, fragment);
  95. if (addToBackStack) {
  96. ft.addToBackStack(null);
  97. } else {
  98. removePrevious();
  99. }
  100. ft.commitAllowingStateLoss();
  101. getSupportFragmentManager().executePendingTransactions();
  102. fragments.add(fragment);
  103. setFragment();
  104. }
  105. public void backTopFragment() {
  106. if (fragments != null && fragments.size() > 1) {
  107. removeContent();
  108. backTopFragment();
  109. }
  110. }
  111. /**
  112. * set current fragment.
  113. */
  114. private void setFragment() {
  115. if (fragments != null && fragments.size() > 0) {
  116. fragment = fragments.get(fragments.size() - 1);
  117. } else {
  118. fragment = null;
  119. }
  120. }
  121. /**
  122. * get the current fragment.
  123. *
  124. * @return current fragment
  125. */
  126. public BaseFragment getFirstFragment() {
  127. return fragment;
  128. }
  129. /**
  130. * get amount of fragment.
  131. *
  132. * @return amount of fragment
  133. */
  134. public int getFragmentNum() {
  135. return fragments != null ? fragments.size() : 0;
  136. }
  137. /**
  138. * clear fragment list
  139. */
  140. protected void clearFragments() {
  141. if (fragments != null) {
  142. fragments.clear();
  143. }
  144. }
  145. /**
  146. * remove previous fragment
  147. */
  148. private void removePrevious() {
  149. if (fragments != null && fragments.size() > 0) {
  150. fragments.remove(fragments.size() - 1);
  151. }
  152. }
  153. /**
  154. * init fragment list.
  155. */
  156. private void initFragments() {
  157. if (fragments == null) {
  158. fragments = new ArrayList<>();
  159. }
  160. }
  161. /**
  162. * remove current fragment and back to front fragment.
  163. */
  164. public void removeContent() {
  165. removePrevious();
  166. setFragment();
  167. getSupportFragmentManager().popBackStackImmediate();
  168. }
  169. /**
  170. * remove all fragment from back stack.
  171. */
  172. protected void removeAllStackFragment() {
  173. clearFragments();
  174. setFragment();
  175. getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
  176. }
  177. /**
  178. * 跳转Activity
  179. * skip Another Activity
  180. *
  181. * @param activity
  182. * @param cls
  183. */
  184. public static void skipAnotherActivity(Activity activity,
  185. Class<? extends Activity> cls) {
  186. Intent intent = new Intent(activity, cls);
  187. activity.startActivity(intent);
  188. activity.finish();
  189. }
  190. /**
  191. * 退出应用
  192. * called while exit app.
  193. */
  194. public void exitLogic() {
  195. ActivityStackManager.getInstance().popAllActivity();//remove all activity.
  196. removeAllStackFragment();
  197. System.exit(0);//system exit.
  198. }
  199. /**
  200. * [是否设置沉浸状态栏]
  201. *
  202. * @param statusBar
  203. */
  204. public void setStatusBar(boolean statusBar) {
  205. isStatusBar = statusBar;
  206. }
  207. /**
  208. * [是否设置全屏]
  209. *
  210. * @param fullScreen
  211. */
  212. public void setFullScreen(boolean fullScreen) {
  213. isFullScreen = fullScreen;
  214. }
  215. /**
  216. * [是否设置旋转屏幕]
  217. *
  218. * @param screenRoate
  219. */
  220. public void setScreenRoate(boolean screenRoate) {
  221. isScreenRoate = screenRoate;
  222. }
  223. @Override
  224. protected void onStart() {
  225. super.onStart();
  226. Log.i(TAG, "--->onStart()");
  227. }
  228. @Override
  229. protected void onResume() {
  230. super.onResume();
  231. Log.i(TAG, "--->onResume()");
  232. }
  233. @Override
  234. protected void onRestart() {
  235. super.onRestart();
  236. Log.i(TAG, "--->onRestart()");
  237. }
  238. @Override
  239. protected void onPause() {
  240. super.onPause();
  241. Log.i(TAG, "--->onPause()");
  242. }
  243. @Override
  244. protected void onStop() {
  245. super.onStop();
  246. Log.i(TAG, "--->onStop()");
  247. }
  248. @Override
  249. protected void onDestroy() {
  250. super.onDestroy();
  251. Log.i(TAG, "--->onDestroy()");
  252. ActivityStackManager.getInstance().popActivity(this);
  253. }
  254. //返回键返回事件
  255. @Override
  256. public boolean onKeyDown(int keyCode, KeyEvent event) {
  257. if (KeyEvent.KEYCODE_BACK == keyCode) {
  258. if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
  259. finish();
  260. return true;
  261. }
  262. }
  263. return super.onKeyDown(keyCode, event);
  264. }
  265. }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值