【问题标题】:Finish subclass activity from its superclass从其超类完成子类活动
【发布时间】:2012-10-02 18:34:00
【问题描述】:

考虑以下场景:
TemplateActivity 类扩展 Activity。在onResume() 中,它执行一个布尔变量的验证,如果为假,它完成方法和活动,并开始一个新的活动,OtherActivity

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

问题:
OtherActivity 需要从TemplateActivity 开始时,有没有办法终止ChildActivity?没有在子类中实现有效性检查。

超类:

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

【问题讨论】:

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


    【解决方案1】:

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

    1. TemplateActivity 中引入一个方法DoStuff()(替换为合理的名称)。在那里做所有的 // 做事 位。
    2. TemplateActivity OnResume的末尾调用这个方法
    3. 在子活动中覆盖它以使用子活动//做东西位扩展它。
    4. 不要不要覆盖 ChildActivity 中的onResume

    这样,如果在 TemplateActivity OnResume 中触发条件,则不会执行任何父项和子项 DoStuff。 ChildActivity不应该知道关于这种行为的任何事情

    【讨论】:

      【解决方案2】:

      我想这就是你想要得到的:

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

      【讨论】:

      • 这类似于从子类完成的有效性检查,这是我试图避免的,因为我不想在所有子类中实现它。
      • 是的,你是对的。我认为 Paul-Jan 建议的是更好的方法。
      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      相关资源
      最近更新 更多