android - 正确扩展/覆盖库 Activity ,在新项目中有效地替换它?

标签 android android-activity overriding extend

我有图书馆项目 A 和子项目 B。B 的唯一区别是单个 Activity 需要有额外的代码(例如,用于广告)

我知道我可以将 A.Activity 复制到 B 并添加代码,但如果我更改 A 中的代码,它不会在 B 中,所以这不是一个选项。

我如何将 A.Activity 扩展到 B.Activity 并添加一些代码,同时将其保留在 list 中的位置(因此按下 B.Activity 1 中的按钮,我转到 B.Activity 2(扩展来自 A.Activity)

详细场景:

在项目 A 中,单击 FirstActivity 中的按钮时,我转到 SecondActivity。我想覆盖 SecondActivity,当在项目 B 中时,我单击 FirstActivity(与 A 中的 FirstActivity 相同)我转到 SecondActivity,它被覆盖/扩展。

最佳答案

在您的子项目/非 lib 项目中,创建一个新 Activity (我们称之为子 Activity ),它从 lib 项目(父项目)中的 Activity 扩展而来。然后覆盖您要修改的方法。

在子项目的 list 中,您需要添加子 Activity 并(我想)通过为其提供适当的 Intent 过滤器使其成为启动 Activity 。

如果它不是启动 Activity ,那么您可能还会遇到库项目中的 Intent 试图启动 Activity 的标准(非覆盖)版本的问题。在使用一种“动态” Intent 系统之前,我已经克服了这个问题,而不是对 Intent 的类类型进行硬编码,而是从返回类型的 Application 对象中获取它。

例如

在图书馆计划中:

public class MainActivity extends Activity {

private void launchOverideableActivity(){

    MyApp app = (MyApp) getApplication();
    Intent i = new Intent(this, app.getIntentClassType());
    startActivity(i);
}}

并覆盖应用程序对象,以便您可以提供此动态类类型:

public class MyApp extends Application {

public Class getIntentClassType(){
    return MainActivity.class;
}}

然后在您的子项目中,扩展您的 Activity 并执行自定义工作。但也覆盖库项目中的应用程序对象并覆盖您的方法,但返回您覆盖的 Activity 类类型:

public class OveriddenApp extends MyApp {

@Override
public Class getIntentClassType() {
    return MyOveriddenActivity.class;
}}

像这样从图书馆项目扩展 Activity 有点笨拙,但从长远来看,它确实允许更清晰的代码分离,所以我认为这一点编码开销是值得的。

我很想知道是否有更优雅的方式来做到这一点...

关于android - 正确扩展/覆盖库 Activity ,在新项目中有效地替换它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17403431/

相关文章:

java - 如何从数据库访问所有用户?

android 滑动水平 View 分页与 MapView

java - 按后退按钮时不要终止 Activity

java - 重写 CameraDevice.statecallback 中的 onError 会出现错误

ruby - 在保持检查输出的同时覆盖 to_s

android - 如何在其他设备不需要时将数据传递给另一个机器人设备

java - 生成随机数时出现非法参数异常

android - 最小化应用程序、更改语言并恢复调用 onCreate() 而不是 onResume()

android - 在 onLoadFinished 方法中启动 Activity

ruby-on-rails - 大肆破坏以覆盖图像