我正在开发一个 Android 应用程序,目前在将上下文从 ListFragment 传递到标准 Java 类时遇到问题。
我有一个名为 Common 的类,在构造函数中我传递了上下文,这样我就可以执行各种常见任务,例如显示警告对话框,这样我就可以继续重用代码,而不必每次都写出代码对于我需要的每个警报对话框。在我正在使用的标准 Activity 中初始化类(class)。
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 传递给构造函数的参数。只有当我将 getActivity().getApplicationContext() 作为参数传递给构造函数时,我才会收到此错误。
作为测试,我还更改了一个扩展 Activity 的类,并使用 getApplicationContext 而不是使用它,我得到了同样的错误,所以它不一定特定于我使用 ListFragment。
感谢您提供的任何帮助。
最佳答案
您不能在您的情况下使用 ApplicationContext
。而是只使用 getActivity()
。 Activity 是一个 Context
,因此您的 Common
类构造函数将得到满足。
但是您的 Common
类实际上应该有 Common(Activity a)
构造函数。
关于android - 使用 getApplicationContext 将上下文传递给标准 java 类会导致 Force Close,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590661/