BaseActivityの抽出

4403 ワード

継承性
一:定義【1】現実世界では子承父業【2】対象の世界では自分の中で、継承は一つのクラスが別のクラスのメンバー変数とメンバー方法注を得た.
  • Javaでは単一継承のみがサポートされており、多くの継承は許可されていません.
  • 子クラスは、親クラスのprivateへのアクセス権を持つメンバー変数とメソッドを継承できません.
  • サブクラスは、親のメソッドを書き換えることができ、親と同じ名前のメンバー変数
  • を命名することができる.
  • 親を継承する場合、親に抽象メソッドがある場合、親の抽象メソッド
  • が書き換えられます.
  • 親のコンストラクション関数は継承されません.子のコンストラクション関数では、親のコンストラクション関数
  • を呼び出す必要があります.
    二:関数の複写(override)1:定義:【1】:親子関係を持つ2つのクラスの中で;【2】親クラスと子クラスにはそれぞれ1つの関数があり、この2つの関数の定義(戻り値タイプ、関数名、パラメータリスト)は完全に同じ子クラスが親の関数を継承し、変更する必要があるプロセス【3】子クラスが親のメソッドを複写した場合、実行はシステムが子クラスを呼び出すメソッドであり、子クラスが親のメソッドを継承した場合(書き換え)、実行は親を呼び出す方法です
    BaseActivityでは一般的にどのようなものを抽出してカプセル化しますか?一般的なダイアログボックス、ステータスバーの色の変更、後退キー、キーボードの表示と非表示、ライフサイクルメソッド(activityの管理)、イベント配布、findコントロール、fragment、ブロードキャストなど
    public class TCBaseActivity extends AppCompatActivity implements DialogControl {
    
        private static final String TAG = TCBaseActivity.class.getSimpleName();
        private boolean _isVisible;
    
        private ProgressDialog _waitDialog;
    
        //      
        private ErrorDialogFragment mErrDlgFragment;
    
    
        //        
        private LocalBroadcastManager mLocalBroadcatManager;
        private BroadcastReceiver mExitBroadcastReceiver;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            mLocalBroadcatManager = LocalBroadcastManager.getInstance(this);
            mExitBroadcastReceiver = new ExitBroadcastRecevier();
            mLocalBroadcatManager.registerReceiver(mExitBroadcastReceiver, new IntentFilter(TCConstants.EXIT_APP));
    
            mErrDlgFragment = new ErrorDialogFragment();
    
            _isVisible = true;
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mLocalBroadcatManager.unregisterReceiver(mExitBroadcastReceiver);
        }
    
        public void onReceiveExitMsg() {
            TCUtils.showKickOutDialog(this);
        }
    
        @Override
        public ProgressDialog showWaitDialog() {
            return showWaitDialog(R.string.loading);
        }
    
        @Override
        public ProgressDialog showWaitDialog(int resid) {
            return showWaitDialog(getString(resid));
        }
    
        @Override
        public ProgressDialog showWaitDialog(String message) {
            if (_isVisible) {
                if (_waitDialog == null) {
                    _waitDialog = DialogHelp.getWaitDialogNotCancel(this, message);
                }
                if (_waitDialog != null) {
                    _waitDialog.setMessage(message);
                    _waitDialog.show();
                }
                return _waitDialog;
            }
            return null;
        }
    
        @Override
        public void hideWaitDialog() {
            if (_isVisible && _waitDialog != null) {
                try {
                    _waitDialog.dismiss();
                    _waitDialog = null;
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    
        public class ExitBroadcastRecevier extends BroadcastReceiver {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(TCConstants.EXIT_APP)) {
                    //         ,          :    、    
                    onReceiveExitMsg();
                }
            }
        }
    
        protected void showErrorAndQuit(String errorMsg) {
    
            if (!mErrDlgFragment.isAdded() && !this.isFinishing()) {
                Bundle args = new Bundle();
                args.putString("errorMsg", errorMsg);
                mErrDlgFragment.setArguments(args);
                mErrDlgFragment.setCancelable(false);
    
                //      .show(...)     dialogfragment,  IllegalStateException
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.add(mErrDlgFragment, "loading");
                transaction.commitAllowingStateLoss();
            }
        }
        @Override
        protected void attachBaseContext(Context newBase) {
            super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
        }
    
        public void showToast(String msg){
            Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
        }
    }
    
    

    dialogControlインタフェースの内容はダイアログボックスについてです
    public interface DialogControl {
    
        public abstract void hideWaitDialog();
    
        public abstract ProgressDialog showWaitDialog();
    
        public abstract ProgressDialog showWaitDialog(int resid);
    
        public abstract ProgressDialog showWaitDialog(String text);
    }