安卓Toast消息未显示

78
我有一个按钮,当用户点击该按钮时,如果满足某些条件,则需要显示 Toast,但不显示 Toast 消息... 代码:已编辑
 Button addMe = (Button)findViewById(R.id.addMe);
    addMe.setOnClickListener(new OnClickListener() {
           public void onClick(View v) {
               if(selectedReason.equals("--Select--")){
                   Log.i("TAG","-----");
                   Toast.makeText(getBaseContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();
               }else if(selectedType.equals("--Select--")){
                   Toast.makeText(getParent(), "Discount type can not be blank", Toast.LENGTH_SHORT).show();
               }else{
                   if(selectedType.equals("Value")){
                       if(spc_amount.getText().toString().equals("")){
                           Log.i("TAG","-----");
                           Toast.makeText(getBaseContext(), "Discount type can not be blank", Toast.LENGTH_SHORT).show();
                       }else{
                           if(Double.parseDouble(spc_amount.getText().toString()) > invoiceValue){
                               Toast.makeText(getBaseContext(), "Amonut can not be grater than invoice", Toast.LENGTH_SHORT).show();
                           }else{
                               Discount dis = new Discount();
                               dis.setCriteriaName(selectedReason);
                               dis.setDiscountValue(Double.parseDouble(spc_amount.getText().toString()));
                               spDisList.put(1,dis);
                               tl.removeAllViews();
                            loadTableLayout();
                           }

                       }
                   }
               }
           }
    });

我尝试过使用 getParent()getApplicationContext()SpecialDiscountActivity.thisgetBaseContext()来操作上下文,但都没有起作用...

这个Toast消息出现在Tab Activity Group下面。


3
如下评论所指出的,您还需要为该应用程序启用“显示通知”,以便 Toast 正常工作。 - Atul
1
你为什么修改了代码并包含了解决方案?应该保留错误,否则这个问题就没有意义了。 - Fato39
1
还有一个常见的问题:如果你不在主线程中,你需要调用runOnUiThread。例如: runOnUiThread(() -> Toast.makeText(getApplicationContext(), " ...", Toast.LENGTH_LONG).show()); - Atan
19个回答

129

尝试:

Toast.makeText(getBaseContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();

你在所有地方都省略了 .show(),这导致所有的提示框都被实例化了,但从未执行。


11
哦天啊,为什么会这样。因为那个问题已经卡了几个小时了! - CJ_COIMBRA
5
这真是太傻了。 - Gibolt
我有一种感觉,我会犯这个错误很多次。如果你使用jQuery,它与.show().hide() DOM元素的方法有点类似,所以如果你记得Toast默认是隐藏的,那么这可能有助于记住要执行.show() - Jim Factor
我有一个.show()方法,我正在从活动的onCreate方法中调用它,并且我也使用了this, MainActivity.this, getApplication(), getApplicationContext(), getBaseContext(),但都没有成功。Toast在前两次测试中显示了,但之后再也没有显示过。这段时间之间没有进行任何代码更改。 - user5125586
@RichardMcFriendOluwamuyiwa 但总有你错过的那个小细节,我深知此道。 - Mihael Keehl

77
请原谅我如果下面的内容并不是解决您问题的方法,但我曾经有一次意外取消了该应用程序的“显示通知”设置。建议您进入设备的设置/应用/管理器,并检查此设置。

5
我从来没想过那一点……我原本以为这个设置只会隐藏我的服务的通知图标,但你说得对,它也隐藏了弹出提醒。 - prom85
3
哇,我对此非常怀疑,但至少在4.4.4版本上,禁用通知还可以阻止弹出消息的显示。 - Taylor Kline
我也做了这件事,浪费了我30分钟的时间 :( - StoneLam

64

我认为您忘记了 .show();,应该是...

Toast.makeText(getBaseContext(), "Amount can not be grater than invoice",
                                                     Toast.LENGTH_SHORT).show();

1
感谢 @LalitPoptani,我使用了 Toast.makeText(SalesActivityGroup.group.getParent(), "金额不能大于发票", Toast.LENGTH_SHORT).show(); - Piraba
@NagkeeranPiraba,关于你的问题还有一件事,你应该提到你正在使用Tab。 - Lalit Poptani
我简直不敢相信这也是我的错误!哈哈。非常感谢你提醒我! - Federico Alvarez

56

只需重新启动设备!这解决了我的问题。


2
天啊,对于任何阅读这个答案的人来说,他的意思是“重新启动你的设备”。我差点就要给你的回答点个踩... xP - varun
2
兄弟,你真是救了我一整天啊!我一直在显示一个像 Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 这样的提示框,但突然间就不出现了。这让我开始怀疑自己的能力和人生意义... 重启设备后问题解决了! - Georgi
1
哇,2020年也能用了。Pixel 2设备构建QQ1A.191205.008。太棒了! - Treewallie
1
在我的MiA2上工作了。 很高兴我找到了这个。 我正要开始修改已经在运行的代码! - Sparers
它有效了,谢谢。有人知道为什么和怎么做的吗? - Luciano Brum
显示剩余3条评论

14

1
不在UI线程上调用经常让我陷入困境,这比我愿意承认的要频繁。 - Gary

11
如果 Toast 没有显示,那么要么你没有调用 show() 方法,要么你不在UI线程上。理想情况下,你应该创建一个帮助方法在 UI 线程上显示 Toast。
 /** Execute Toast on UI thread **/
 private fun showToast(message: String) {

        Handler(Looper.getMainLooper()).post {
            // Code here will run in UI thread
            Toast.makeText(
                this, 
                message,
                Toast.LENGTH_LONG
            ).show()
        }
    }

在主线程之外调用空的Handler构造函数将创建一个不会发布到主线程的Handler。您需要指定主Looper。 - Tenfour04

9

我是这样做的

Toast.makeText(SalesActivityGroup.group.getParent(), "Amount can not be 
                                grater than invoice", Toast.LENGTH_SHORT).show();

9

我刚刚遇到了这个问题,想知道为什么一个简单的Toast没有出现。经过几次尝试后,我想起要检查应用程序的通知设置,然后它就出现了。

我打开了通知设置并将其打开,它开始显示。我搜索并找到了下面的链接,讲解了同样的问题:

https://code.google.com/p/android/issues/detail?id=35013


1
我在Android 9上也遇到了这个问题,这个方法解决了它。谢谢! - Szabolcs Becze

6
可能有两种可能性:
1- 在Toast.makeText(getActivity(), "Hi", Toast.LENGTH_SHORT)的最后没有添加.show();
2- 可能存在您未传递正确的上下文的情况。
为此,请尝试传递getActivity().getApplicationContext();,在我的情况下解决了该问题。
祝你好运 :)

6

简单地重启模拟器并不能解决我的问题。

  1. 关闭模拟器
  2. 工具 -> AVD管理器
  3. 在设备列表中,点击“操作”列下的“下拉图标”。
  4. 现在进行冷启动

现在重新安装应用程序它将正常工作。


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