在Android上多次显示单个Toast是否正常?

时间:2015-09-28 03:47:22

标签: android android-toast

我正在使用Toast向用户显示一些信息,因为无论先前的消息如何,我都希望无延迟地显示最新消息,我这样做(从旧项目中学习):

public class MainActivity extends Activity {

    private Toast mToast;

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

        mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
    }

    private void toast(final String message) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mToast.setText(message);
                mToast.show();
            }
        });
    }
}

也就是说,单个Toast对象被重复使用并多次显示,每当我需要显示新消息时,我只会再次setTextshow。它似乎工作正常,但在我在谷歌搜索后,我发现大多数人会这样做:

    private void toast(final String message) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mToast.cancel();
                mToast = Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT);
                mToast.show();
            }
        });
    }

之前的Toast cancel然后Toast.makeText创建一个新的Toast。

有什么不同吗?我应该选择哪一个?

2 个答案:

答案 0 :(得分:1)

你应该尝试这样的代码,以避免一次看到多个吐司。

FormRequest

代码帮助我here

答案 1 :(得分:1)

您可以在Activity的变量中缓存当前Toast,然后在显示下一个toast之前取消它。这是一个例子:

Toast m_currentToast;

void showToast(String text)
{
    if(m_currentToast != null)
    {
        m_currentToast.cancel();
    }
    m_currentToast = Toast.makeText(this, text, Toast.LENGTH_LONG);
    m_currentToast.show();

}

立即更新Toast消息的另一种方法:

void showToast(String text)
{
    if(m_currentToast == null)
    {   
        m_currentToast = Toast.makeText(this, text, Toast.LENGTH_LONG);
    }

    m_currentToast.setText(text);
    m_currentToast.setDuration(Toast.LENGTH_LONG);
    m_currentToast.show();
}

参考:DEMO PAGE