1

我正在开发一个 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 类是使用传递给构造函数的this参数从扩展Activity的类初始化的,则 Common 类中的所有功能,包括 Yes/No 对话都可以正常工作。只有当我将getActivity().getApplicationContext()作为参数传递给构造函数时,才会收到此错误。

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

感谢您的任何帮助,您可以提供。

4

1 回答 1

1

你不能ApplicationContext在你的情况下使用。而是使用getActivity(). Activity 是一个Context,因此您的Common类构造函数将得到满足。

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

于 2012-09-25T20:54:40.733 回答