我可以在其他类中创建 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 的对象吗?的主要内容,如果未能解决你的问题,请参考以下文章