我在获取自定义Toast类时遇到了同样的问题,可以在任何活动中重复使用。
无论我尝试什么,我都会收到null pointer exception
或invoke 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();
}
}}
答案 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");