package com.joker.rxweather.views.activity; import android.os.Bundle; import android.support.annotation.CallSuper; import android.view.KeyEvent; import butterknife.ButterKnife; import com.joker.rxweather.MyApplication; import com.joker.rxweather.R; import com.joker.rxweather.common.event.FinishActEvent; import com.trello.rxlifecycle.components.support.RxAppCompatActivity; import rx.Subscription; import rx.functions.Action1; import rx.subscriptions.Subscriptions; public abstract class BaseActivity extends RxAppCompatActivity { private Subscription subscribe = Subscriptions.empty(); @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); ButterKnife.bind(BaseActivity.this); } @CallSuper @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(BaseActivity.this.getLayoutId()); BaseActivity.this.onCreated(); BaseActivity.this.initView(savedInstanceState); if (this instanceof ListActivity || this instanceof SearchActivity) { BaseActivity.this.SubscribeToFinish(); } } @SuppressWarnings("unchecked") private void SubscribeToFinish() { /** * https://gist.github.com/benjchristensen/04eef9ca0851f3a5d7bf */ subscribe = MyApplication .get() .getRxBus() .toObservable(FinishActEvent.class) .subscribe(new Action1<FinishActEvent>() { @Override public void call(FinishActEvent finishActEvent) { BaseActivity.this.finish(); overridePendingTransition(R.anim.anim_none, R.anim.scale_out); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { BaseActivity.this.exit(); } return false; } @CallSuper @Override protected void onDestroy() { if (subscribe != null && !subscribe.isUnsubscribed()) subscribe.unsubscribe(); super.onDestroy(); ButterKnife.unbind(BaseActivity.this); MyApplication.get().getRefWatcher().watch(this); } protected abstract int getLayoutId(); protected abstract void onCreated(); protected abstract void initView(Bundle savedInstanceState); protected abstract void exit(); }