在另一个类中引用MainActivity的成员。

7 浏览
0 Comments

在另一个类中引用MainActivity的成员。

我的MainActivity是这样开始的:

class MainActivity : AppCompatActivity() {

val mDBAdapter = DBAdapter(this, "nearbydata")

我想在另一个类PickFromList(继承自ListActivity)中使用数据库适配器。

我似乎无法将其称为MainActivity.mDBAdapter。我理解这是因为没有MainActivity类的实例。

根据如何引用另一个类中的当前或主要活动,这是“许多开发人员都会遇到的问题”。该线程中的最佳答案如下:

如果您已经有一个有效的上下文,请使用此方法:Activity activity =(Activity)context;

不幸的是,对于像我这样没有经验的人来说,这并不有用。我怎么知道我有一个有效的上下文?如果我没有一个,我该怎么得到一个?

如果我尝试将该代码粘贴到我的PickFromList类中,快速修复会告诉我“无法解析符号'context'”,并提供创建一个本地变量'context'的选项。但那并没有帮助。

0
0 Comments

从上述内容中,我们可以了解到问题的出现原因是因为在一个活动中引用另一个活动会导致内存泄漏和崩溃。为了解决这个问题,可以通过全局状态或依赖注入来共享DBAdapter实例。在这种情况下,可以使用应用程序上下文来实例化DBAdapter。

解决方法之一是创建一个App类,并在该类中创建一个DBAdapter实例,并使用应用程序上下文初始化它。这样,我们就可以在活动中使用App.adapter来引用该实例。

然而,这只是一种粗糙的解决方法。更好的方式是通过依赖注入来提供依赖关系。

在文章中还提到了关于App类的更多信息和全局变量的使用。全局变量没有问题,但是如果不小心使用它们,可能会导致难以测试和维护的应用程序设计。依赖注入的主要思想是通过构造函数传递全局变量,这样你的类就不会依赖于它们,可以轻松地进行测试。

在进一步讨论了一些问题和解决方法后,文章还提到了如何在AndroidManifest中注册App类的方法。

总结起来,引用MainActivity中的成员变量可能会导致内存泄漏和崩溃。解决方法之一是通过全局状态或依赖注入来共享实例。具体的实现方法可以使用应用程序上下文实例化DBAdapter,并通过创建一个App类来引用它。然而,更好的方式是使用依赖注入来提供依赖关系。在AndroidManifest中注册App类可以确保它被正确地初始化和使用。

通过这篇文章,我们可以了解到为什么不应该在一个活动中引用另一个活动,并学习到了一些解决方法和相关概念。

0