我正在使用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
对象被重复使用并多次显示,每当我需要显示新消息时,我只会再次setText
和show
。它似乎工作正常,但在我在谷歌搜索后,我发现大多数人会这样做:
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。
有什么不同吗?我应该选择哪一个?
答案 0 :(得分:1)
答案 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