无法创建自定义Toast

时间:2015-03-27 22:35:36

标签: android class nullpointerexception toast

我在获取自定义Toast类时遇到了同样的问题,可以在任何活动中重复使用。

无论我尝试什么,我都会收到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();

    }
}}

2 个答案:

答案 0 :(得分:0)

我不明白为什么要扩展Activity。你永远不会直接构建一个活动,所以这里的构造函数是没有意义的 如果您正在尝试制作自定义Toast消息,请尝试以下解决方案:
https://stackoverflow.com/a/11288522/2180461

编辑:

更具体地说明为什么要获得NPE:

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

您正在向ViewGroup投射上下文,而不是使用它来查找该ViewGroup中的R.id.toastroot。最有可能 - 这里的上下文为null,因此这是您的例外的起源。

答案 1 :(得分:0)

不是在Activity中使用这种功能的最佳方式。

相反,您可以使用具有静态方法的类为您执行此操作,如下所示:

 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");