如何覆盖Android库项目中的类?

如何覆盖Android库项目中的类?,第1张

概述以下是我的情况:我有一个图书馆项目和一个基于它的项目.现在在库中我有两个类A和B,其中A使用B.在使用库的项目中,我有另一个类B,它应该覆盖库中的类B.但每次A级拨打电话时,它都会从图书馆的B级结束.如何告诉Android我的项目中的B类应该从库中使用B类的INSTEAD?解决方法:这不适用于

以下是我的情况:

我有一个图书馆项目和一个基于它的项目.现在在库中我有两个类A和B,其中A使用B.在使用库的项目中,我有另一个类B,它应该覆盖库中的类B.

但每次A级拨打电话时,它都会从图书馆的B级结束.
如何告诉Android我的项目中的B类应该从库中使用B类的INSTEAD?

解决方法:

这不适用于当前布局.您必须使用策略模式.在您的库中使用构造函数定义libA​​,该构造函数在构造函数中获取类型为libB的对象:

class libA{    libB b;    public libA(libB b)        this.b = b;    }}

然后,您可以在项目中覆盖libB,并使用扩展libB的类创建libA:

class ProjectB extends libB{}libA a = new libA(new ProjectB());

回答Turbos问题:

您想从库中启动项目活动.然后将创建Intent的代码移动到您的Projects中,因为只有在您的项目中,您才知道要启动的Activity的类型或名称.

您在评论(here)中提到的解决方案通过猜测应该启动的Activity的名称在库项目中创建Intent.这没有什么不妥,但它不是一个优雅的解决方案.您只能启动遵循该特殊命名方案的活动.因此,您无法启动项目中可见的任意活动,例如来自其他库的活动,您无法更改类的名称.

要将Intent创建移动到库中,您可以使用策略,模板或工厂方法模式.有关与您的库设计相匹配的更多(创建)模式,请参阅Design Patterns on Wikipedia.

一个简单的解决方案是:

创建一个抽象的libraryActivity并从中扩展ProjectActivitIEs. libraryActivity定义了一个返回Intent的抽象方法.该抽象方法的实现在ProjectActivitIEs中完成.

abstract class libActivity{    private voID doSomething(){        //library does something        //and finally calls createIntent() to start an project specific Activity        startActivity(this.createIntent());    }    protected abstract Intent createIntent();}class ProjectActivity extends libActivity{    protected Intent createIntent(){        return new Intent(ProjectActivity.this, AnyActivityYouWant.class);    }        }
总结

以上是内存溢出为你收集整理的如何覆盖Android库项目中的类?全部内容,希望文章能够帮你解决如何覆盖Android库项目中的类?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1098231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存