我可以在其他类中创建 Activity 的对象吗?

Posted

技术标签:

【中文标题】我可以在其他类中创建 Activity 的对象吗?【英文标题】:Can I create an object of an Activity in other class? 【发布时间】:2013-02-04 01:08:20 【问题描述】:

我在MainActivity 中定义了一个函数,现在我想从我的应用程序中的另一个类访问该函数。我创建了一个MainActivity 的对象,并使用该对象调用了该函数。虽然没有错误,但它没有执行。每次我尝试执行时,应用程序都会崩溃。

【问题讨论】:

你只需传递活动类的上下文...... 你需要传递上下文你可以使用getApplicationContext() 试试下面的链接,希望对你有用:- ***.com/questions/9240413/…> ***.com/questions/7734791/…> 【参考方案1】:

活动 A 应该有一个变量

static ActivityA activityA;

在onCreate状态:

activityA = this;

并添加此方法:

public static ActivityA getInstance()
   return   activityA;
 

在活动B中,调用

ActivityA.getInstance().myFunction(); //call myFunction using activityA

【讨论】:

+1 回答...这是我与 Raghav Sood 讨论过的问题,答案低于他的 cmets 是的,只有当一个***活动应该控制它下面的活动时才需要这样做。例如可以使用透明活动作为图形界面来控制其下方的活动。否则,该函数最好是一个单独的实用程序类中的静态函数,并在需要时传递上下文。 它被调用的方法但是不能改变imageView的setbackgroundresources().... ... 没有得到myFunction 使用这种方法,您将如何保证静态活动对象在系统需要时被垃圾收集。【参考方案2】:

您不能只使用以下方法创建活动对象:

MyActivity activity = new MyActivity();

就像使用普通 Java 类一样。 android 中的所有 Activity 都必须经过 Activity 生命周期,以便它们具有附加的有效上下文。

通过将 Activity 视为普通的 Java 类,您最终会得到一个空上下文。由于 Activity 中的大多数方法都是在其 Context 上调用的,因此您将收到空指针异常,这就是您的应用崩溃的原因。

相反,将需要从其他类调用的所有此类方法移动到实用程序类中,该类在其构造函数中接受有效上下文,然后在方法中使用该上下文来完成工作。

【讨论】:

我知道使用通用 util 类来访问常用方法...但是在活动中采用静态方法并使用类名调用它呢...?这是错的吗?如果我们这样做会发生什么.. @Pragnani 静态方法不能引用类的非静态成员。由于类上下文不是静态的,你仍然会得到一个错误。 ,是的,我知道..但是我们如何在我们的非静态类中访问 Calender 类的静态方法,即 Calender.getInstance()..即使它是工厂方法,但它是静态的 Calendar.getInstance() 用于根据您的语言环境等返回日历类的实例,用于调用日历类上的其他方法。 @Pragnani 是的。但是你不能在你的 Activity 中创建一个使用 Activity 实例或上下文调用任何东西的静态方法,然后在另一个类中调用它【参考方案3】:

将变量设为公开,然后在适配器中创建对象,如下所示:

public int i;  // Variable in Activity class

((ActivityName) context).i          // accessing in adapter 

【讨论】:

以上是关于我可以在其他类中创建 Activity 的对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

在其他类 C++ 中创建多个对象

通过其他类构造函数在主方法中创建对象时访问对象属性

在类中创建对象的最佳实践

在类中创建对象

我可以在密码哈希函数中创建用户对象吗?

如何在一个 Activity 中创建两个相机预览? [关闭]