如何在Android中快速显示覆盖旧Toast的新Toast

5
我有一个在Android中以对话框形式显示的值数组,点击其中任何一项会显示该特定toast。现在,如果我在这个列表(数组)上的其他项目上进行下一个动作,那个特定的toast就会在短时间内(约5秒钟)后显示,直到旧的toast被显示。如果我想要在选择/点击列表上的其他项目后立即显示新的toast,我该怎么做?
那么,有人能告诉我实现这个的逻辑是什么吗?
例如,考虑以下代码 -
     String NumberOfItems[] = { "1", "2", "3" };
     Activity mActivity;
     int id =0;
     AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
     builder.setIcon(R.drawable.ic_launcher);
     builder.setTitle(R.string.dialog_heading);
     builder.setSingleChoiceItems(NumberOfItems, id, new DialogInterface.OnClickListener() 
      {
        public void onClick(DialogInterface dialog, int id)
         {

       switch(id)
         {
         case 0:
              Toast.makeText(mActivity.getBaseContext(),"Item selected is 1",Toast.LENGTH_SHORT).show();
                   break;
         case 1:
              Toast.makeText(mActivity.getBaseContext(),"Item selected is 2",Toast.LENGTH_SHORT).show();
                   break;
         case 2:
              Toast.makeText(mActivity.getBaseContext(),"Item selected is 3",Toast.LENGTH_SHORT).show();
                   break;

                } 

          }
        });  
            AlertDialog alertDialog =  builder.create();
            alertDialog.show(); 

现在弹出一个包含3个选项的对话框,点击第一个选项后会很快显示“所选项目为1”,但我接下来点击其他选项时,要等约5秒才会显示“所选项目为2”。如果我想要立即在点击第二个选项时显示,我该怎么办?
简而言之,刷新Toast的逻辑是什么?
非常感谢您的帮助。

http://developer.android.com/reference/android/widget/Toast.html - JackTools.Net
1
使用此链接获取解决方案 https://dev59.com/wXE85IYBdhLWcg3wejfn - Renjith Krishnan
3个回答

10

您可以在活动中初始化一个 Toast,然后在每次点击时更改其文本。

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

 switch(id)
     {
     case 0:
           mToast.setText( "Item selected is 1" );
           mToast.show();

               break;
     case 1:
          mToast.setText( "Item selected is 2" );
          mToast.show();
               break;
     case 2:
          mToast.setText( "Item selected is 3" );
          mToast.show();
               break;
            } 
      }
    });  

我觉得这对你有用。

更多信息


1
至少写明你参考了其他链接。你从https://dev59.com/wXE85IYBdhLWcg3wejfn链接复制了这段代码,甚至连文本都没有改变。 - InnocentKiller
1
@InnocentKiller,是的,你说得对,我很抱歉忘记了。感谢你的评论。 - Shayan Pourvatan
1
哇!!这很好用...!!非常感谢。 - Santosh

3

请将那个Toast制作成一个引用。通常每个人都使用Toast.makeText(..)来显示toast,但不创建引用。

Toast t = new Toast(this, "Text 1", Toast.LENGTH_LONG);
t.show();
t.cancel();
t = new Toast(this, "Text 2", Toast.LENGTH_LONG);
t.show();


t.show(); 将把Toast叠放并依次显示它们。您需要调用 cancel() 来取消Toast。 现在是 t.cancel() 让它与众不同。
这段代码将在显示“Text 1”Toast时取消它,并立即显示“Text 2”。
您可以根据需要使用此代码适当变化。


0

我认为您想要以较低的频率显示toast,根据我的考虑,消息显示在此app中。

为此,您可以使用相对布局,在listview上方放置一个带有toast背景的textview,并在单击的项目上应用文本值,并在其上使用show hide。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接