如何取消在Android上以不同方法创建的Toast?

时间:2011-03-31 17:16:26

标签: android toast

我有以下代码:

private Toast movieRecordToast;

    private void displayNextMovie() {
        if (movieRecordToast != null) movieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often)
        movieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT);
        movieRecordToast.show();

    private void displayPrevMovie() {
        if (movieRecordToast != null) movieRecordToast.cancel();
        movieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT);
        movieRecordToast.show();        

但是如果快速调用displayNextMovie几次然后调用displayPrevMovie,则仍会显示“下一个”Toast,并且仅在显示“Prev”之后。 看起来取消无法正常工作。

3 个答案:

答案 0 :(得分:29)

每次要显示新文本时,您都可以轻松地只保留一个Toast对象,并在需要时取消当前Toast,而不是创建新的Toast对象。在显示下一个Toast之前,您可以使用Toast.setText()功能更改文字。

示例代码:

private Toast mToastText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create the object once.
    mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT);
}

private void displayText(final String message) {
    mToastText.cancel();
    mToastText.setText(message); 
    mToastText.show();
}

答案 1 :(得分:0)

我认为有很多方法可以实现向用户显示next / prev信息。我会完全抛弃祝酒词,然后用更新TextView 的文本,并使用next / prev电影的名称。这将消除您的问题,而恕我直言也可以提供更好的用户界面。

但是,如果您的设计要求确实要求举报吐司通知,请尝试:

    private Toast nextMovieRecordToast;
private Toast prevMovieRecordToast;


private void displayNextMovie() {
    if (prevMovieRecordToast != null) prevMovieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often)
    nextMovieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT);
    nextMovieRecordToast.show();}

private void displayPrevMovie() {
    if (nextMovieRecordToast != null) nextMovieRecordToast.cancel();
    prevMovieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT);
    prevMovieRecordToast.show();    }    

答案 2 :(得分:0)

wroclai的解决方案非常棒!然而,当形成长消息吐司到短消息时,它会将Toast拧紧,反之亦然。 要修复此问题而不是使用以前的对象重新创建它。所以不是这一行:
    mToastText.setText(message);
写下这个:myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
动画也看起来更好:)