1

次のシナリオを考えてみましょう
。 クラスは。をTemplateActivity拡張しActivityます。その中onResume()でブール変数の検証を実行し、falseの場合、メソッドとアクティビティを終了し、新しいアクティビティを開始しOtherActivityます。

ChildActivity拡張するクラスが実行されると、スーパーが開始する必要があるかどうかに関係なく、終了するのをTemplateActivity待ってから続行します。super.onResume()Intent

質問:必要なときに開始する必要があるとき
に終了する方法はありますか?子クラスに妥当性チェックを実装せずに。ChildActivityOtherActivityTemplateActivity

スーパークラス:

class TemplateActivity extends Activity {
    @Override
    protected void onResume() {
        super.onResume();

        if(!initialized)
        {
            startActivity(new Intent(this, OtherActivity.class));
            finish();
            return;
        }

        //Do stuff
    }
}

サブクラス:

class ChildActivity extends TemplateActivity {
    @Override
    protected void onResume() {
        super.onResume();

        //Do stuff
    }
}
4

2 に答える 2

5

より洗練された解決策は、クラス設計に対するわずかに異なるアプローチです。

  1. にメソッドを導入しますDoStuff()(わかりやすい名前に置き換えます) TemplateActivity// do スタッフビットをすべて実行します。
  2. の最後からこのメソッドを呼び出しますTemplateActivity OnResume
  3. 子アクティビティでそれをオーバーライドして、子アクティビティで拡張します// do stuffビット。
  4. ChildActivity でオーバーライドしないでください。onResume

このように、条件が TemplateActivity OnResume で発生した場合、親と子の DoStuff はいずれも実行されません。は、この動作について何もChildActivity知る必要はありません。

于 2012-10-02T18:42:10.873 に答える
1

これがあなたが取得しようとしているものだと思います:

class ChildActivity extends TemplateActivity {
    @Override
    protected void onResume() {
        super.onResume();
        if (!isFinishing()) {
            // Do stuff
        }
    }
}
于 2012-10-02T18:42:28.510 に答える