我只需要覆盖show()
类的Toast
方法。我创建了一个扩展Toast
类的类,但后来我创建了一个toast消息,我得到了一个例外,setView(View view)
没有被调用。但我不想为方法创建自定义View
,而是使用默认方法。
那么,如果不为show()
方法创建自定义View
,如何覆盖唯一的setView(View view)
方法呢?
以下是我的工作:
MyOwnToast m = new MyOwnToast(getApplicationContext());
m.makeText(getApplicationContext(), "Bla bla bla", Toast.LENGTH_LONG);
m.show();
我的定制吐司就在这里:
public class MyOwnToast extends Toast {
public MyOwnToast(Context context) {
super(context);
}
@Override
public void show() {
super.show();
Log.i("Dev", "
}
此问题也在dev site上说明:
注意:除非您这样做,否则不要将公共构造函数用于Toast 用setView(View)定义布局。如果你没有 要使用自定义布局,必须使用makeText(Context,int,int) 创造吐司。
我如何覆盖show()
方法?
答案 0 :(得分:1)
您是否在覆盖范围内致电super.show()
了? Toast.show()
可能正在调用此函数,而您的覆盖现在正在调用它以便不会发生调用。
你可能需要做的是这样的事情:
public class MyOwnToast extends Toast {
public MyOwnToast(Toast toast) {
//Code to initialize your toast from the argument toast
//Probably something like this:
this.setView(toast.getView());
this.setDuration(toast.getDuration());
//etc. for other get/set pairs in Toast
}
public static MyMakeText(Context context, CharSequence text, int duration) {
return new MyOwnToast(Toast.makeText(context, text, duration));
}
public void show() {
//Your show override code, including super.show()
}
}
然后,当您想要使用它时,请执行:
MyOwnToast.MyMakeText(activity, "Some text", Toast.LENGTH_LONG).show();
在填写此内容时,请参阅Toast文档作为参考:http://developer.android.com/reference/android/widget/Toast.html
答案 1 :(得分:0)
更简单的方法:
public class MyToast extends Toast {
public MyToast(Context context){
super(context)
this.setView(LayoutInflater.from(context).inflate(R.layout.activity_toast,null));
}
public void showMe(){
super.show();
}
public static MyToast myMakeText(Context con,String message,int duration) {
MyToast mts = new MyToast(con);
View view = mts.getView();
TextView messageArea = view.findViewById(R.id.toastTextView);
messageArea.setText(message);
mts.setDuration(duration);
return mts;
}}
所以你会问:
MyToast.myMakeText(this,"my message",7000).showMe();