公子堇 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;试试

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮