我经常遇到问题,因为它需要的上下文我无法使用。
例如,如果你想要在某个类中使用Toast,你需要上下文,但是你不能使用任何上下文,因为你不在Activity中。
现在我做的是,我给了那个班级我做了一个变量" context"这是在构造函数中设置的,但我并不认为这是正确的。
那么如何处理非Activity类中的上下文?
提前致谢:)
答案 0 :(得分:1)
如果您不参与某项活动,则可以始终使用getApplicationContext()
来返回该应用的上下文。
答案 1 :(得分:0)
在非Activity类中使用上下文的复杂方法是 ContextWrapper 。
你可以在这里阅读一下:
Best practice to pass Context to non-activity classes?
或这里
http://itekblog.com/android-context-in-non-activity-class/
您还可以使用变量" context"或者通过静态方法中的参数传递,你应该没问题,记住你可能会遇到一些问题。
答案 2 :(得分:0)
是的,你是对的,你通常会将Context传递给可能需要它的所需对象或类,有时你会在构造函数中传递它,但有时候知道上下文可能会改变,最好在方法中传递它。由开发人员选择正确的方案。
确实,在某些情况下你可能需要另一种方法来获取或传递上下文,但通常在构造函数或方法中传递它就足够了
答案 3 :(得分:0)
永远不要将对上下文的引用保持为成员变量或静态变量,因为可能会导致内存泄漏,因为GC很难收集引用。
由于您在非活动类中使用上下文,我假设该类是某种带有静态方法块的辅助类。
例如:
public class ToastMessageHelper {
public static void showToast(Context context) {
Toast.makeText(context, "Hello",Toast.LENGTH_SHORT).show();
}
}
最好将context作为参数传递给需要执行上下文的方法。
现在,你可以简单地打电话,
ToastMessageHelper.showToast(context);
在您的活动或片段中。希望这有帮助!