显示来自非 activity class 的祝酒词。将上下文设置为 toast 的问题
Showing toasts from a non-activity class. Ploblem setting the context to the toast
剧透:这个 post 可能包含一些愚蠢的东西,因为习惯于 C 和 Java 编程
有一个 activity MainActivity 和一个 public 非 activity class 包含许多方法。我需要为其中一些人显示 toast 警报
当前的尝试是这样的,失败了 "Non-static method can not be referenced from a static context" for getApplicationContext():
void errorWarn (String warning) {
Context context = android.content.ContextWrapper.getApplicationContext();
Toast.makeText(context, "Something's wrong in " + warning, Toast.LENGTH_SHORT).show();
}
那么,如何从非activityclass调用toasts?
UPD:错误警告将从 class 中的方法 调用。所以,如果 class 的方法发生错误,应该有一个警报
我们在 MainActivity 中有一个 editText 字段。 class 应该从中获取并解析字符串。如果在某些步骤处理失败,它会在 MainActivity
中显示祝酒词
UPD2:完整结构。
主要活动:
public class MainActivity extends ActionBarActivity {
<...>
public void ButtonClick (View view) {
Class.testfunc("");
}
}
Class:
public class Class {
void errorWarn (Context context, String warning) {
Toast.makeText(context, "Something must be wrong. " + warning, Toast.LENGTH_SHORT).show();
}
void testfunc (String string) {
errorWarn(string);
}
}
传递上下文参数
void errorWarn (Context context,String warning) {
Toast.makeText(context, "Something's in wrong " + warning, Toast.LENGTH_SHORT).show();
}
定义您的方法,使其在参数中使用 Context
并将您的 Activity
传递给它。
in YourOtherClass
public class YourOtherClass {
public void showToast(Context context, String message){
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
或者如果你想在你的构造函数中获取上下文并仅在 YourOtherClass
中使用 showToast
:
public class YourOtherClass {
private Context context;
public YourOtherClass(Context context){
this.context = context;
}
private void showToast(String message){
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
in MainActivity
new YourOtherClass().showToast(this, message);
或者如果你有一个YourOtherClass
的成员变量Context
并且你想在YourOtherClass
的构造函数中传递Context
,你会做
new YourOtherClass(this).showToast(message);
// showToast doesn't have to take a Context as argument, it could just take one as constructor parameter and hold that.
// But then you have to make sure YourOtherClass is not used anymore if the Activity is closed.
对于您提供的代码中出现的错误:
Context context = com.example.ex3.MainActivity;
这失败了,因为您正在尝试将类型分配给实例。
MainActivity.errorWarn("here");
这失败了,因为您正在调用一个非静态方法(该方法的签名中没有静态修饰符),就好像它是一个静态方法一样。查看 this question 了解有关静态方法与非静态方法的更多详细信息。
在不知道 YourOtherClass
做什么或它的生命周期如何与 Activity 相关联的情况下,很难说,但必须从 [=48= 触摸 UI ] 与 UI 无关,也没有提及 Context
您可以使用,感觉很奇怪。将 Context
作为 YourOtherClass
的构造函数的参数可能是您所需要的,但要小心泄漏 Context
和 Activity
生命周期。
剧透:这个 post 可能包含一些愚蠢的东西,因为习惯于 C 和 Java 编程
有一个 activity MainActivity 和一个 public 非 activity class 包含许多方法。我需要为其中一些人显示 toast 警报
当前的尝试是这样的,失败了 "Non-static method can not be referenced from a static context" for getApplicationContext():
void errorWarn (String warning) {
Context context = android.content.ContextWrapper.getApplicationContext();
Toast.makeText(context, "Something's wrong in " + warning, Toast.LENGTH_SHORT).show();
}
那么,如何从非activityclass调用toasts?
UPD:错误警告将从 class 中的方法 调用。所以,如果 class 的方法发生错误,应该有一个警报
我们在 MainActivity 中有一个 editText 字段。 class 应该从中获取并解析字符串。如果在某些步骤处理失败,它会在 MainActivity
中显示祝酒词UPD2:完整结构。
主要活动:
public class MainActivity extends ActionBarActivity {
<...>
public void ButtonClick (View view) {
Class.testfunc("");
}
}
Class:
public class Class {
void errorWarn (Context context, String warning) {
Toast.makeText(context, "Something must be wrong. " + warning, Toast.LENGTH_SHORT).show();
}
void testfunc (String string) {
errorWarn(string);
}
}
传递上下文参数
void errorWarn (Context context,String warning) {
Toast.makeText(context, "Something's in wrong " + warning, Toast.LENGTH_SHORT).show();
}
定义您的方法,使其在参数中使用 Context
并将您的 Activity
传递给它。
in YourOtherClass
public class YourOtherClass {
public void showToast(Context context, String message){
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
或者如果你想在你的构造函数中获取上下文并仅在 YourOtherClass
中使用 showToast
:
public class YourOtherClass {
private Context context;
public YourOtherClass(Context context){
this.context = context;
}
private void showToast(String message){
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
in MainActivity
new YourOtherClass().showToast(this, message);
或者如果你有一个YourOtherClass
的成员变量Context
并且你想在YourOtherClass
的构造函数中传递Context
,你会做
new YourOtherClass(this).showToast(message);
// showToast doesn't have to take a Context as argument, it could just take one as constructor parameter and hold that.
// But then you have to make sure YourOtherClass is not used anymore if the Activity is closed.
对于您提供的代码中出现的错误:
Context context = com.example.ex3.MainActivity;
这失败了,因为您正在尝试将类型分配给实例。
MainActivity.errorWarn("here");
这失败了,因为您正在调用一个非静态方法(该方法的签名中没有静态修饰符),就好像它是一个静态方法一样。查看 this question 了解有关静态方法与非静态方法的更多详细信息。
在不知道 YourOtherClass
做什么或它的生命周期如何与 Activity 相关联的情况下,很难说,但必须从 [=48= 触摸 UI ] 与 UI 无关,也没有提及 Context
您可以使用,感觉很奇怪。将 Context
作为 YourOtherClass
的构造函数的参数可能是您所需要的,但要小心泄漏 Context
和 Activity
生命周期。