公子堇 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 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题