显示android内容已隐藏,Android-隐藏所有显示的Toast消息

Android-隐藏所有显示的Toast消息

如何删除当前显示的所有吐司消息?

在我的应用程序中,有一个列表,当用户单击某个项目时,会显示一条敬酒消息,10条-10条吐司消息。

因此,如果用户单击10次,然后按菜单按钮,则他们必须等待几秒钟才能读取菜单选项文本。

它不应该那样:)

15个解决方案

79 votes

我的解决方案是在活动中初始化一个Toast。 然后在每次单击时更改其文本。

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

if (a) {

mToast.setText("This is a");

mToast.show();

} else if (b) {

mToast.setText("This is b");

mToast.show();

}

Mudar answered 2020-01-07T21:03:43Z

31 votes

如何禁用所有吐司消息   目前正在处理中?

您可以通过在Toast对象上调用cancel()来取消单个Toasts。 AFAIK,不过您无法取消所有未解决的Toasts。

CommonsWare answered 2020-01-07T21:04:07Z

12 votes

如何检查是否已显示烤面包?

private Toast toast;

...

void showToast() {

if (toast == null || toast.getView().getWindowVisibility() != View.VISIBLE) {

toast = Toast.makeText(getActivity(), "Toast!", Toast.LENGTH_LONG);

toast.show();

}

}

Justin Muller answered 2020-01-07T21:04:27Z

8 votes

Mudar的解决方案在类似的问题上对我来说效果很好-多次单击OnClick单击后,积压了很多吐司。

我一直在寻找一个具有不同的OnClick和show()s的Toast实例,这正是我一直在寻找的答案-单击新按钮后,先前的消息即被取消。 发现

仅供参考,这是我所做的...

在OnClick中:

final Toast myToast = Toast.makeText(getBaseContext(), "", Toast.LENGTH_SHORT);

在每个OnClick中:

myToast.setText(R.string.toast1);

myToast.show();

BasicPleasureModel answered 2020-01-07T21:05:05Z

4 votes

我的解决方案是将所有吐司参考文献保存在列表中,并制定一种在需要时取消所有吐司参考文献的方法:

private ArrayList msjsToast = new ArrayList();

private void killAllToast(){

for(Toast t:msjsToast){

if(t!=null) {

t.cancel();

}

}

msjsToast.clear();

}

创建Toast时,请按照以下方式保存参考:

Toast t = Toast.makeText(context, "Download error: xx", Toast.LENGTH_LONG);

t.show();

msjsToast.addToast(t);

当您需要删除它们时:

killAllToast();

您可以像在全局类中的静态方法一样创建它,并使用它杀死应用程序的所有吐司。

user23 answered 2020-01-07T21:05:38Z

3 votes

我想我找到了一种使敬酒消息不排队的方法。 以为我会分享。

这部分放在顶部。

private Toast msg;

这部分放在我的setOnTouchListener()中

if(null == msg)

{

msg = Toast.makeText("Message to user!", Toast.LENGTH_SHORT);

msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);

msg.show();

//handels the stupid queueing toast messages

new Handler().postDelayed(new Runnable()

{

public void run()

{

msg = null;

}

}, 2000);

}

它比任何东西都更像是骇客。 但是,只要有人喜欢我的应用程序的一部分,我就会显示敬酒消息。 如果他们发疯,请单击“收藏夹”按钮,它就会因敬酒消息而发疯。 但现在不再。 它将等待2秒钟,然后将我的toast对象设置为null并再次显示。

S.A.Jay answered 2020-01-07T21:06:12Z

3 votes

这是我对问题的简单答案:

首先,在您的活动中创建一个全局Toast对象。

private Toast example;

现在,每当您要调用新的Toast消息时,只需执行以下操作:

if(buttonClicked) {

example.cancel();

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

example.setText("Button Clicked");

example.show();

}

这样可以将所有Toast保留在一个Toast中央,并删除Toast垃圾邮件。 这是一个快速的粗略解决方案,因此也许有更优雅的方法可以做到这一点。

Roymunson answered 2020-01-07T21:06:45Z

2 votes

在onClick函数外部创建Toast对象,并使用下面的代码。它将停止任何现有的Toast并启动最新的Toast。

Toast mToast;

public void onClick(String abc) {

if(mToast!=null)

mToast.cancel();

Context context = this;

mToast = Toast.makeText(context, abc, Toast.LENGTH_SHORT);

mToast.show();

}

Akash Gupta answered 2020-01-07T21:07:05Z

1 votes

这就是我的方法。

Toast toast;

if(toast==null)

toast=Toast.makeText(getApplicationContext(),R.string.act_now_private_post_text,Toast.LENGTH_LONG);

else

toast.setText(R.string.act_now_private_post_text);

toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL,10,10);

toast.show();

Victor Odiah answered 2020-01-07T21:07:25Z

0 votes

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

showToast.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

mToast.cancel();

String text=null;

if(ON)

{

text="Toast is on";

}

else

{

text="Toast is off";

}

mToast.setText(text);

mToast.setDuration(Toast.LENGTH_SHORT);

mToast.show();

}

});

balu answered 2020-01-07T21:07:40Z

0 votes

您可以这样使用。

class MyToast {

private static Toast t;

public MyToast(Context ctx, String message) {

if (t != null) {

t.cancel();

t = null;

}

t = Toast.makeText(ctx, message, Toast.LENGTH_SHORT);

}

public void show() {

t.show();

}

}

İlter Engin KIZILGÜN answered 2020-01-07T21:08:00Z

0 votes

使用上面的Madur出色的答案,我将其扩展为可以处理不同类型消息的类:

public class ToastManager {

private Toast toastWarningMessage;

private Toast toastAddMessage;

...

public void messageWarning(Context context, String message) {

if(toastWarningMessage == null) {

toastWarningMessage = Toast.makeText(context, message, Toast.LENGTH_SHORT);

} else {

toastWarningMessage.cancel();

toastWarningMessage.setText(message);

}

toastWarningMessage.show();

}

public void messageAdd(Context context, String message) {

if(toastAddMessage == null) {

toastAddMessage = Toast.makeText(context, message, Toast.LENGTH_SHORT);

} else {

toastAddMessage.cancel();

toastAddMessage.setText(message);

}

toastAddMessage.show();

}

...

}

这是从我的主要活动中调用的:

ToastManager toastManager;

...

private void toastWarningMessage(String message) {

if(toastManager == null) toastManager = new ToastManager();

toastManager.messageWarning(this, message);

}

对消息进行分类的原因是要确保没有覆盖重要消息。 该解决方案似乎很容易重用,因为它仅涉及重命名Toast和函数名称。

当用户向按钮发送垃圾邮件时,对于相同的消息类型,吐司每次都将取消。 唯一的问题是用户是否可以将混合消息发送给垃圾邮件。 这将导致第一个消息重复,并且一旦它最终到期,其他消息将分别显示一次。 这并不是一个很大的问题,但是需要注意。

我没有研究过拥有多个Toast实例的可能弊端。

David answered 2020-01-07T21:08:39Z

0 votes

在我的应用程序中,当应用程序进入后台时,排队敬酒一次又一次地出现,所以我做了以下工作来解决问题。

添加代码以检测应用何时进入后台。 注册生命周期处理程序的一种方法。 有关更多详细信息,请参考

registerActivityLifecycleCallbacks(new MyLifecycleHandler());

App.inBackground = true;当应用程序进入后台并使用SmartToast类显示吐司时

public class SmartToast {

static ArrayList> toasts = new ArrayList<>();

public static void showToast(@NonNull Context context,@NonNull String message){

//this will not allowed to show toast when app in background

if(App.inBackground) return;

Toast toast = Toast.makeText(context,message,Toast.LENGTH_SHORT);

toasts.add(new WeakReference<>(toast));

toast.show();

//clean up WeakReference objects itself

ArrayList> nullToasts = new ArrayList<>();

for (WeakReference weakToast : toasts) {

if(weakToast.get() == null) nullToasts.add(weakToast);

}

toasts.remove(nullToasts);

}

public static void cancelAll(){

for (WeakReference weakToast : toasts) {

if(weakToast.get() != null) weakToast.get().cancel();

}

toasts.clear();

}

}

当应用程序进入后台以隐藏当前和所有待处理的吐司时,请调用SmartToast.cancelAll();方法。 代码很有趣。 请享用!

Qamar answered 2020-01-07T21:09:12Z

0 votes

这些怎么样 !?

private Toast toast;

...

// Methods for short toast messages and long toast messages

private void showShortToast(String message) {

if(null != toast) toast.cancel();

(toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT)).show();

}

private void showLongToast(String message) {

if(null != toast) toast.cancel();

(toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG)).show();

}

并在onPause()

@Override

protected void onPause() {

...

if(null != toast) toast.cancel();

..

}

Pramod P K answered 2020-01-07T21:09:36Z

-11 votes

以下是禁用Toast消息,删除show()表达式的方法。

//Disable notification message

Toast.makeText(this,"Message",Toast.LENGTH_SHORT);

//Enable notification message

Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show();

SKf answered 2020-01-07T21:09:56Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值