Ale*_*lex 2 java android android-toast
剧透:这篇文章可能由于使用C和Java编程新手而有些愚蠢
有一个活动MainActivity和一个包含许多方法的公共非活动类。我需要为其中一些显示烤面包警报
当前的尝试是这样的,但对于getApplicationContext()失败,并显示“无法从静态上下文引用非静态方法”:
void errorWarn (String warning) {
Context context = android.content.ContextWrapper.getApplicationContext();
Toast.makeText(context, "Something's wrong in " + warning, Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
那么,如何从非活动类中调用吐司呢?
UPD:将从类中的方法中调用errorWarn 。因此,如果在类的方法中发生错误,则应该发出警报
我们在MainActivity中有一个editText字段。该类应从中获取并解析字符串。如果在某些步骤上处理失败,则在MainActivity中显示吐司
UPD2:完整结构。
主要活动:
public class MainActivity extends ActionBarActivity {
<...>
public void ButtonClick (View view) {
Class.testfunc("");
}
}
Run Code Online (Sandbox Code Playgroud)
类:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
定义您的方法,使其采用Contextin参数并将其传递Activity给它。
在YourOtherClass中
public class YourOtherClass {
public void showToast(Context context, String message){
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果您想在构造函数中使用Context并showToast仅在中使用YourOtherClass:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在MainActivity中
new YourOtherClass().showToast(this, message);
Run Code Online (Sandbox Code Playgroud)
或者,如果您具有的Context成员变量,YourOtherClass并且想要Context在的构造函数中传递,则YourOtherClass可以执行
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.
Run Code Online (Sandbox Code Playgroud)
对于您提供的代码中的错误:
Context context = com.example.ex3.MainActivity;
Run Code Online (Sandbox Code Playgroud)
之所以失败,是因为您试图为实例分配类型。
MainActivity.errorWarn("here");
Run Code Online (Sandbox Code Playgroud)
失败是因为您正在调用非静态方法(该方法的签名中没有静态修饰符),就好像它是静态方法一样。请查看此问题,以获取有关静态方法和非静态方法的更多详细信息。
不知道做什么YourOtherClass和它的生命周期如何链接到Activity的行为,很难说,但是不得不从与UI不相关且没有任何Context可使用引用的类中触摸UI ,这很奇怪。您可能需要使用Contextas的构造函数作为参数YourOtherClass,但是要警惕泄漏Context和Activity生命周期。
| 归档时间: |
|
| 查看次数: |
6242 次 |
| 最近记录: |