我如何成功地在全局范围内声明变量,上下文问题
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();
}
}
我看过几篇文章,包括 ,无论我在 Toast
的 Context
部分输入什么,我都会收到 Cannot resolve method
消息。另外,如果有任何关于这个主题的傻瓜教程,我将不胜感激。
一种解决方案是将 Context
作为 Activity
或 Fragment
的参数传递。
而不是实例化 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 以像这样将 Context
和 Toast
消息作为参数传递
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 的回复:)
我正在学习如何将活动中经常使用的功能全部放在一个地方的教程。
例如,一条 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();
}
}
我看过几篇文章,包括 Toast
的 Context
部分输入什么,我都会收到 Cannot resolve method
消息。另外,如果有任何关于这个主题的傻瓜教程,我将不胜感激。
一种解决方案是将 Context
作为 Activity
或 Fragment
的参数传递。
而不是实例化 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 以像这样将 Context
和 Toast
消息作为参数传递
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 的回复:)