从其超类中完成子类活动

时间:2012-10-02 18:34:00

标签: android android-intent android-activity superclass activity-finish

请考虑以下情况:
课程TemplateActivity扩展Activity。在onResume()内,它执行布尔变量的验证,如果为false,则完成方法和活动,并启动新活动OtherActivity

当扩展ChildActivity的类TemplateActivity运行时,等待super.onResume()完成,然后继续,无论其超级是否需要启动Intent或不。

问题:
ChildActivity需要从OtherActivity开始时,有没有办法终止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
    }
}

2 个答案:

答案 0 :(得分:5)

更优雅的解决方案是类设计略有不同:

  1. DoStuff()中引入方法TemplateActivity(替换为合理的名称)。在那里做所有 //做东西位。
  2. TemplateActivity OnResume
  3. 的末尾调用此方法
  4. 在子活动中覆盖它以使用子活动 // do stuff 位扩展它。
  5. 覆盖ChildActivity中的onResume
  6. 这样,如果条件在TemplateActivity OnResume中触发,则不会执行父节点和子节点DoStuff。 ChildActivity不应该知道关于此行为的任何

答案 1 :(得分:1)

我想这就是你想要的:

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