公子堇 2019-04-11 12:04 采纳率: 20%
浏览 611

关于Toast的构造函数和获取当前Activity的问题

最近写一个自定义的Toast,需要在service里面调用这个自定义的类,源码如下;

public class MyToast {
    private Activity context;

    public MyToast(Activity mcontext){
        this.context=mcontext;
    }


    //在主线程和子线程中显示
    public  void showMyToast(final String messages) {
        if ("main".equals(Thread.currentThread().getName())) {
            showToast(messages);
        } else {
            context.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    showToast(messages);
                }
            });
        }
    }

    //toast初始化和布局
    private void showToast(final String text){
        Toast toast =new Toast(context);
        LayoutInflater inflater =context.getLayoutInflater();
        View toastLayout=inflater.inflate(R.layout.mytoast,(ViewGroup)context.findViewById(R.id.toast));
        TextView textView=(TextView)toastLayout.findViewById(R.id.toastText);
        textView.setText(text);
        toast.setGravity(Gravity.BOTTOM,0,0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(toastLayout);
        toast.show();
    }
}

现在有个问题就是,我这个类需要传入一个Activity的上下文,但是我搜索了好些方法,在service里获取当前Activity都不太理想,于是我便想参考系统的Toast方法(因为在service里使用Toast可以直接传入service的上下文),更改一下我的类中的上下文,系统的Toast方法如下

图片说明

可以看见这里使用的构造方法与我不一样,那么看一下构造方法:

图片说明

但是奇怪的是,当我自己写的时候就出问题了,Toast mytoast=new Toast(context,looper);这一句就会报错,提示没有这个方法,我在网上看其他的Toast说明却发现构造方法不一样!如下:

图片说明

希望有哪位大佬帮我解决一下!就是要么将Toast改成全局的,即传入的上下文为Context类型,要么就是教教我怎么在service里获取当前的Activity,不胜感激!

  • 写回答

2条回答 默认 最新

  • 萧萧风 2019-04-11 14:06
    关注

    private Activity context;改成 private Context context;试试

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器