我如何成功地在全局范围内声明变量,上下文问题

How do I succeed in declaring variables globally, issue with context

我正在学习如何将活动中经常使用的功能全部放在一个地方的教程。

例如,一条 toast 消息出现在我的整个项目中,而不是在每个 activity 中都有该函数,只是在一个地方调用它,GlobalFunctions.java .

所以,我用简单的函数得到它,例如,在 GlobalFunctions.java :

public class GlobalFunctions {

    public void simpleMessage() {
        System.out.println("simpleMessage text goes here");
    }

}

我这样称呼它来自 Activity1:

GlobalFunctions simplemessage = new GlobalFunctions();
simplemessage.simpleMessage();

但是呢? :

public class GlobalFunctions {

    public void simpleMessage() {
        Toast.makeText(getApplicationContext(), "simpleMessage text goes here", Toast.LENGTH_LONG).show();
    }
}

我看过几篇文章,包括 ,无论我在 ToastContext 部分输入什么,我都会收到 Cannot resolve method 消息。另外,如果有任何关于这个主题的傻瓜教程,我将不胜感激。

一种解决方案是将 Context 作为 ActivityFragment 的参数传递。

而不是实例化 GlobalFunctions,编写和使用静态方法可能是更好的方法。

创建一个 Java 实用程序 class:

   public class Utils {

        public static void showToast(Context context, String text) {
              Toast.makeText(context, text, Toast.LENGTH_LONG).show();
        }

    }

    // for example on the Activity code

        Utils.showToast(this, "This is the toast text");

关键是static

静态值允许您在整个项目中使用静态 methods variables ..等。

您可以使用以下概念:

public static class GlobalFunctions {

public static void simpleMessage(Context context, String message) {
    Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}

}

你必须像这样调用它:

GlobalFunctions.simpleMessage(/*YourActivity.this*/ /*or*/ /*getActivity()*/, "toast");

尝试像这样创建 class 以像这样将 ContextToast 消息作为参数传递

public class GlobalFunctions {      

    public static void simpleMessage(Context context,String message) {
        Toast.makeText(Context, message, Toast.LENGTH_LONG).show();
     }
}

像这样调用这个函数

  GlobalFunctions.simpleMessage(YourActivity.this,"your Mesaage");

在 activity 以外的字段中保留上下文可能是内存泄漏的原因,但有一些解决方法。

您可以使用应用程序或应用程序上下文创建 Singleton,并在自定义应用程序 class 中的 onCreate 中对其进行初始化。但是你必须记住,你不能使用这个上下文来构建视图——它没有被风格化。

其他方法只是将上下文作为参数传递。

抱歉缺少代码,来自 phone 的回复:)