“Toast.MakeText”是否在所有活动中产生输出?

时间:2017-03-06 11:59:18

标签: android toast

我想在消息处理程序中通过Toast创建一些文本,我的消息处理程序在单独的类中声明。

public class HandlerAlert extends Handler {
      final static byte IP_OK=0;
      final static byte IP_WRONG=-1;
      Context ctx;

    public HandlerAlert(Context ctx) {
        super();
        this.ctx=ctx;
    }


    public void handleMessage(android.os.Message msg) {
        switch (msg.what) {
            case IP_OK:
                if (msg.arg1==(CheckSendMode.REGULAR).ordinal())
                {
                    Toast.makeText(ctx/*null*/,   
                        "OK",Toast.LENGTH_LONG).show();
                    Log.i("MessageOk",ctx.getClass().getName());
                }
........

我有两个活动,都可以调用此消息。我希望我的Toast.MakeText会在使用上下文(参数ctx)的活动中产生输出。但是,尽管通过ctx,我仍然看到两个活动中的输出。在Context ctx中观察到Log.i("MessageOk",ctx.getClass().getName());中传递的活动的名称我认为Toast.MakeText在所有活动中都有效,尽管有上下文,甚至测试了空上下文(获得了绝对预期的异常)。 我的问题如下:Toast.MakeText是否在当前打开的活动中发送输出?如有必要,我已准备好提供任何代码部分。

提前致谢。

2 个答案:

答案 0 :(得分:0)

创建一个ShowToast类 在该类中创建一个方法

public Class ShowToast{
 Context mContext;
 public void displayToast(String msg){
 Toast.makeText(mContext,msg,Toast.LENGTH_LONG).show();
}

在您的活动中

ShowToast dispToast = new ShowToast(this);

btn.setOnClickListener(new View.OnClickListener(){
 publiv void onClick(View v){
  dispToast.showToast("Hello World");
}
});

答案 1 :(得分:-1)

这只是假设:我认为实际上toast使用的是应用程序上下文,而不是活动1。我试试了     Toast.makeText(ctx.getApplicationContext()," OK",Toast.LENGTH_LONG)。show(); 它就好像它是活动上下文一样。顺便说一句,

Log.i("MessageOk",ctx.getApplicationContext().getClass().getName());

生成类android.app.Application。请确认或否认我的假设。