显示来自非活动类的祝酒词。 Ploblem将上下文设置为toast

时间:2015-06-12 09:28:30

标签: java android android-toast

Spoiler:由于习惯于C和Java编程新手,这篇文章可能包含一些愚蠢的内容

有一个活动MainActivity和一个包含许多方法的公共非活动类。我需要为其中一些人显示吐司警报

当前的尝试是这样的,它失败了“无法从静态上下文引用非静态方法”for getApplicationContext():

void errorWarn (String warning) {
    Context context = android.content.ContextWrapper.getApplicationContext();
    Toast.makeText(context, "Something's wrong in " + warning, Toast.LENGTH_SHORT).show();
}

那么,如何从非活动类调用toast?

UPD :将从类中的方法调用errorWarn。因此,如果类的方法中出现错误,则应该有警报

我们在MainActivity中有一个editText字段。该类应该从中获取并解析字符串。如果在某个步骤处理失败时,它会在MainActivity中显示Toast

UPD2 :完整结构。

MainActivity:

public class MainActivity extends ActionBarActivity {
    <...>
    public void ButtonClick (View view) {
        Class.testfunc("");
    }
}

类别:

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);
    }
}

2 个答案:

答案 0 :(得分:4)

定义您的方法,以便在参数中使用Activity并将public class YourOtherClass { public void showToast(Context context, String message){ Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } 传递给它。

  在YourOtherClass

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(); } }

new YourOtherClass().showToast(this, message);
  MainActivity中的

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. ,那么您可以

Context context = com.example.ex3.MainActivity;

对于您提供的代码中出现的错误:

MainActivity.errorWarn("here");

此操作失败,因为您尝试将类型分配给实例。

YourOtherClass

这会失败,因为您正在调用非静态方法(该方法在其签名中没有静态修饰符),就好像它是静态方法一样。有关静态和非静态方法的更多详细信息,请查看this question

在不知道Context做什么或者它的生命周期如何与Activity关联的情况下,很难说,但是必须从不与UI相关的类中触摸UI并且没有任何对{{}的引用1}}你可以使用,这感觉很奇怪。将Context作为YourOtherClass的构造函数的参数可能是您需要的,但要注意泄漏ContextActivity生命周期。

答案 1 :(得分:1)

传递上下文参数

 void errorWarn (Context context,String warning) {
        Toast.makeText(context, "Something's in wrong " + warning, Toast.LENGTH_SHORT).show();
    }