自其超完成子活动(Finish subclass activity from its supercl

2019-10-17 06:53发布

考虑以下情形:
TemplateActivity扩展Activity 。 内onResume()它执行一个布尔变量的确认然后,如果假,它完成的方法和活性,并开始一个新的活动, OtherActivity

当类ChildActivity ,它扩展TemplateActivity ,运行时,它会等待super.onResume()完成,然后继续不管其超强的需要启动Intent或没有。

问题:
有没有一种方法来终止ChildActivityOtherActivity需要从开始TemplateActivity ? 无须在子类中的有效性检查。

超类:

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
    }
}

Answer 1:

一个更优雅的解决方案将是一个稍微不同的方法,以一流的设计:

  1. 引入一种方法DoStuff()在(与合理的名称替换) TemplateActivity 。 是否所有的//做的东西有位。
  2. 从调用的结束这个方法TemplateActivity OnResume
  3. 覆盖它的子活动,以使其与子活动扩展//做的东西位。
  4. 不要覆盖onResume在ChildActivity。

这样,如果在TemplateActivity的onResume条件火灾,没有父母和孩子DoStuff将完成。 该ChildActivity不应该知道这种行为什么



Answer 2:

我想这是你想要得到什么:

class ChildActivity extends TemplateActivity {
    @Override
    protected void onResume() {
        super.onResume();
        if (!isFinishing()) {
            // Do stuff
        }
    }
}


文章来源: Finish subclass activity from its superclass