0

我有一个控制我的应用程序逻辑的类,除了扩展 Activity 的类,它在最后一个中声明。

我想知道是否有办法在该课程中使用 toast。

我尝试使用 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

4 回答 4

3

Toast 只需要使用 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();
    }
}

现在,您要做的是检查该 Context 在您传入时是否有效。当我不小心使用 getBaseContext 而不是 getApplicationContext 并导致问题时,有很多情况。但实际上,您可以将 Activity 传入并将其转换为 Context 没有任何问题。

于 2012-05-28T17:06:26.717 回答
1
public class ClassName {        
    public ClassName(Activity _activity) {
            Toast.makeText(_activity, "text", Toast.LENGTH_LONG).show();
    }
}

您可以将其用作 ClassName(YourActivity.this);

于 2012-05-28T16:52:19.687 回答
0

试试这个它对我有用

在您的活动中

上下文上下文 = new yourclass().getAndSetMyContext(Activity.this);

在你的类私有静态上下文 c;

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

在需要 Toast 的方法中,只需使用

Toast.makeText(c,message,Toast.LENGTH_SHORT).show();

于 2015-01-21T07:10:38.633 回答
0

该类不需要从 Activity 扩展,但您需要以某种方式传递给它一个上下文以供使用。这可能是一个活动上下文或应用程序上下文。

只要确保它不会永远保留上下文。

于 2012-05-28T16:57:04.840 回答