我只需要覆盖Toast类的show()

时间:2012-01-24 17:28:53

标签: android

我只需要覆盖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()方法?

2 个答案:

答案 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();