在扩展活动后确保调用事件侦听器

时间:2012-07-12 15:33:49

标签: android inheritance android-activity extend super

如果我扩展Activity并在我的基类中实现一个事件处理程序(对不起,如果这不是正确的OOP术语),我怎样才能确保我的事件处理程序总是从扩展我的类的类中运行。

public class MyActivity extends Activity{

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//Stuff that I need to do.
}

}//MyActivity class

public class MainActivity extends MyActivity{


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
}

}//MainActivity class

目的是MyActivity将最终出现在其他用户将使用的代码库中。 我的类和扩展我的类的Activity实例都有onActivityResult的单独有效用途。我显然无法让onActivityResult最终阻止人们覆盖它。

现在,如果用户忘记添加该超级语句,我的代码就不会运行了。有没有办法强制扩展MyActivity的类的实例在与我在父类中定义的方法重叠的方法中运行super。

2 个答案:

答案 0 :(得分:2)

如果后来的程序员选择不致电super那么这就是他们的决定,他们将失去继承你班级的好处。据我所知,没有办法保证super被召唤或以任何方式迫使他们称呼它。

答案 1 :(得分:1)

据我所知,你不能强制调用super方法。

但是,您可以通过这种方式开发MyActivity,以便更容易理解开发人员应该如何使用它。

如果您的父类MyActivity永远不会被实例化,您可以将它设为抽象类。

抽象类可以包含可以调用抽象方法的方法。

抽象方法必须在扩展它的类中实现。

所以你可以写点像

public abstract class MyActivity extends Activity{

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //Stuff that I need to do.
   onMyActivityResult(requestCode, resultCode, data);
}

public abstract void onMyActivityResult(int requestCode, int resultCode, Intent data);

}//MyActivity class

public class MainActivity extends MyActivity{

@Override
public void onMyActivityResult(int requestCode, int resultCode, Intent data) {
}

}//MainActivity class