1:包含功能
Activity統(tǒng)一管理
沉浸式菜單
EventBus注冊(cè)和解除
Activity跳轉(zhuǎn)方法抽取
返回鍵監(jiān)聽方法抽取
2:代碼
public abstract classMActivityextendsActivity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MActivityManager.getInstance().pushActivity(this);
setTheme(R.style.TranslucentTheme);//沉浸式
requestWindowFeature(Window.FEATURE_NO_TITLE);//沉浸式
EventBus.getDefault().register(this);
setContentView(initContentView());
initState();//沉浸式
initView();
initData();
initEvent();
}
protected abstract intinitContentView();
protected abstract voidinitView();
protected abstract voidinitData();
protected abstract voidinitEvent();
@Subscribe
public voidonReceive(Object o){
}
EventBus的事件接收方法,子類選擇性復(fù)寫
/**
*@time2017/4/14 9:40
*@desc跳轉(zhuǎn)到activity
*/
protected voidtoActivity(Class c,booleanclearOther,HashMap map) {
IntentUtils.makeIntent(this,c,clearOther,map);
}
/**
*@time2017/4/14 9:40
*@desc跳轉(zhuǎn)到activity
*/
protected voidtoActivity(Class c,HashMap map,booleanisFinish) {
IntentUtils.makeIntent(this,c,isFinish,map);
}
/**
*@time2017/4/14 9:35
*@desc返回鍵監(jiān)聽事件
*/
protected booleanbackPress() {
super.onBackPressed();
return false;
}
/**
*@time2017/4/1 18:02
*@desc沉浸式
*/
private voidinitState() {
ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);
View parentView = contentFrameLayout.getChildAt(0);
if(parentView !=null&& Build.VERSION.SDK_INT>=14) {
parentView.setFitsSystemWindows(true);
}
StatusBarCompat.compat(this,getResources().getColor(R.color.base_red));
}
@Override
protected voidonResume() {
super.onResume();
}
@Override
protected voidonDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
MActivityManager.getInstance().popActivity(this);
}
@Override
public booleanonKeyDown(intkeyCode,KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK)) {
returnbackPress();
}else{
return super.onKeyDown(keyCode,event);
}
}
@Override
public voidonBackPressed() {
backPress();
}
}
3:用到的類MActivityManager
public class MActivityManager{
private staticMActivityManagerMActivityManager;
private staticStackactivityStack;
privateMActivityManager() {
}
//退出棧頂Activity
public voidpopActivity(Activity activity) {
if(activity !=null) {
//在從自定義集合中取出當(dāng)前Activity時(shí)爆土,也進(jìn)行了Activity的關(guān)閉操作
activity.finish();
activityStack.remove(activity);
activity =null;
}
}
//獲得當(dāng)前棧頂Activity
publicActivitycurrentActivity() {
Activity activity =null;
if(!activityStack.empty())
activity=activityStack.lastElement();
returnactivity;
}
//將當(dāng)前Activity推入棧中
public voidpushActivity(Activity activity) {
if(activityStack==null) {
activityStack=newStack();
}
activityStack.add(activity);
}
//退出棧中所有Activity
public voidpopAllActivity() {
while(true) {
Activity activity = currentActivity();
if(activity ==null) {
break;
}
popActivity(activity);
}
}
//退出棧中所有Activity
public voidpopAllActivityExceptOne(Class cls) {
while(true) {
Activity activity = currentActivity();
if(activity ==null) {
break;
}
if(activity.getClass().equals(cls)) {
break;
}
popActivity(activity);
}
}
//通過一個(gè)單例模式返回當(dāng)前類的實(shí)例對(duì)象
public staticMActivityManagergetInstance() {
if(MActivityManager==null) {
synchronized(MActivityManager.class) {
if(MActivityManager==null) {
MActivityManager=newMActivityManager();
}
}
}
returnMActivityManager;
}
}
4:用到的類IntentUtils
public class IntentUtils{
/**
*@time2017/4/17 16:56
*@descintent參數(shù)灵奖,支持String,Integer,Double,Folat
*/
private static voidaddParam(Intent intent,HashMap map) {
for(String s : map.keySet()) {
Object o = map.get(s);
if(oinstanceofString) {
intent.putExtra(s,(String) map.get(s));
}else if(oinstanceofInteger) {
intent.putExtra(s,(Integer) map.get(s));
}else if(oinstanceofDouble) {
intent.putExtra(s,(Double) map.get(s));
}else if(oinstanceofFloat) {
intent.putExtra(s,(Float) map.get(s));
}else if(oinstanceofSerializable) {
intent.putExtra(s,(Serializable) map.get(s));
}else{
LogUtils.i("MActivity_toActivityClearOther","暫不支持的參數(shù)類型");
}
}
}
public static voidmakeIntent(Context context,Class c, booleanclearOther,HashMap map) {
if(clearOther) {
MActivityManager.getInstance().popAllActivityExceptOne(context.getClass());
}
Intent intent =newIntent(context,c);
if(map !=null) {
addParam(intent,map);
}
context.startActivity(intent);
if(clearOther) {
MActivityManager.getInstance().popAllActivityExceptOne(c);
}
}
public static voidmakeIntent(Context context,Class c,HashMap map,booleanisFinish){
Intent intent =newIntent(context,c);
if(map !=null) {
addParam(intent,map);
}
context.startActivity(intent);
if(isFinish){
try{
((Activity)context).finish();
}catch(Exception e){
LogUtils.e("IntentUtils_makeIntent","Context不是Activity類型");
}
}
}
}
5:用到的主題