在外部类中使用Toast

时间:2012-05-28 16:44:35

标签: android toast

我有一个控制我的app逻辑的类,除了扩展Activity之外,还在最后一个内部声明了它。

我想知道是否有办法在该课上使用吐司。

我尝试使用Activity扩展该类并在其构造函数中发送上下文,但它不起作用。

修改

这里有代码如何在构造函数中传递上下文:

GameController newgame = new GameController(getApplicationContext());

public GameController(Context _context)
{       
    //...       
    context = _context;
}

Toast.makeText(context, "You can't bet this amount, the minimun bet is: " + minimun_bet, 2).show();

当我运行时,我收到此错误:

05-29 10:58:06.230: E/AndroidRuntime(5753): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

4 个答案:

答案 0 :(得分:3)

Toast只需要使用Context来显示。您需要做的就是将Context传递给这个类,一切都会好的。我所有的自定义课程都是这样做的。如果您可以分享如何在构造函数中实现/调用此传递Context,我们可以帮助指出。

基本上,它是这样的:

public MyClass{
    private Context context;
    public MyClass(Context context){
        this.context = context;
    }
    private void alert(String msg){
        Toast.makeText(this.context, msg, Toast.LENGTH_LONG).show();
    }
}

现在,您要做的是在传入时检查上下文是否有效。当我意外地使用getBaseContext而不是getApplicationContext并导致问题时,有很多实例。但事实上,你可以直接传递你的Activity并将其作为Context投射而没有任何问题。

答案 1 :(得分:1)

public class ClassName {        
    public ClassName(Activity _activity) {
            Toast.makeText(_activity, "text", Toast.LENGTH_LONG).show();
    }
}

您可以将其用作班级名称(您的Activity.this);

答案 2 :(得分:0)

该类不需要从Activity扩展,但您需要以某种方式将其传递给要使用的上下文。这可以是Activity上下文或Application上下文。

请确保它不会永远保留在上下文中。

答案 3 :(得分:0)

试试这个它对我有用

在您的活动中

Context context = new yourclass()。getAndSetMyContext(Activity.this);

在你的课堂上 private static Context c;

public  Context getAndSetMyContext(Context c) {
    this.c = c;
    return this.c;
}

在您需要Toast的方法中使用

Toast.makeText(C,消息,Toast.LENGTH_SHORT).show();