无法创建自定义 toast

Can't create a custom toast

我在获取自定义 toast class 以在任何 activity 中重复使用时遇到了同样的问题。

无论我尝试什么,我都会收到 null pointer exceptioninvoke findviewbyid method 错误。请帮忙

class Toaster extends Activity {
Toaster(Context context, String message) {

    {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup)context.findViewById(R.id.toastroot));

        TextView text = (TextView) layout.findViewById(R.id.toasttext);

        text.setText(message);

        Toast toast = new Toast(context);
        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(layout);
        toast.show();

    }
}}

我不明白你为什么要延长 Activity。你永远不会直接构造一个 activity,所以这里的构造函数是没有意义的。
如果您尝试制作自定义 Toast 消息,请尝试此解决方案:

编辑:

更具体地说明您为什么会收到 NPE:

View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup)context.findViewById(R.id.toastroot));

您正在将上下文投射到 ViewGroup,而不是使用它在该 ViewGroup 中查找 R.id.toastroot。很可能 - 这里的上下文为空,所以这是你的异常的来源。

这不是在 Activity.

中拥有这种功能的最佳方式

相反,您可以使用带有静态方法的 class 来为您完成此操作,如下所示:

 public final class Toaster {

   public static void showToast(final Context context, String message) {
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup)context.findViewById(R.id.toastroot));

    TextView text = (TextView) layout.findViewById(R.id.toasttext);

    text.setText(message);

    Toast toast = new Toast(context);
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    toast.show();
     }

  }

那么,你会这样调用:

 Toaster.showToast(context,"some message");