我有一个控制我的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()
答案 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();