无法创建自定义 toast
Can't create a custom toast
我在获取自定义 toast class 以在任何 activity 中重复使用时遇到了同样的问题。
无论我尝试什么,我都会收到 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();
}
}}
我不明白你为什么要延长 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");
我在获取自定义 toast class 以在任何 activity 中重复使用时遇到了同样的问题。
无论我尝试什么,我都会收到 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();
}
}}
我不明白你为什么要延长 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");