使用getApplicationContext将上下文传递给标准java类会导致强制关闭

时间:2012-09-25 20:38:24

标签: android applicationcontext android-context

我正在开发一个Android应用程序,目前我遇到了从ListFragment将上下文传递给标准Java类的问题。

我有一个名为Common的类,在构造函数中我传递了上下文,因此我可以执行各种常见任务,例如显示警报对话框,以便我可以继续重用代码,而不必每次都编写代码对于我需要的每个警报对话框。在我正在使用的标准活动中初始化类。

Common common = new Common(this);

如果在扩展Activity的类中完成此操作,则上述代码可以正常工作。但是,如果我想做同样的事情,但在扩展ListFragment的类中,这不起作用,所以我使用以下代码来初始化类

Common common = new Common(getActivity().getApplicationContext());

当在ListFragment中执行上面的代码时,当一个函数用于显示是/否警报对话时,我得到一个强制关闭异常

FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window
--token null is not for an application

以下是类

的构造函数的代码
public Common(Context context)
{
    this.context = context;
}

重申一下,如果Common类是使用扩展 Activity 的类初始化的,那么Common类中的所有函数(包括Yes / No对话)都可以正常工作而没有问题此参数传递给构造函数。只有当我 getActivity()。getApplicationContext()作为参数传递给构造函数时才会出现此错误。

作为测试,我还更改了一个扩展活动的类,并使用了getApplicationContext而不是使用它,我得到了相同的错误,所以它不一定特定于我使用ListFragment。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您不能在案件中使用ApplicationContext。而只使用getActivity()。活动是Context,因此您的Common类构造函数将得到满足。

但是你的Common类应该真的有Common(Activity a)构造函数。