我有以下代码:
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”之后。
看起来取消无法正常工作。
答案 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);
动画也看起来更好:)