package com.example.toastdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class ToastActivity extends Activity implements OnClickListener {
private Toast toast;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toast_main);
Button hahaBtn = (Button) findViewById(R.id.hahaBtn);
Button gagaBtn = (Button) findViewById(R.id.gagaBtn);
hahaBtn.setOnClickListener(this);
gagaBtn.setOnClickListener(this);
//初始化一个Toast实例,之后重复利用
toast = Toast.makeText(this, null, Toast.LENGTH_SHORT);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.hahaBtn:
showMessage("哈哈");
break;
case R.id.gagaBtn:
showMessage("嘎嘎嘎嘎嘎嘎嘎!!!");
break;
}
}
private void showMessage(String msg){
/*
* 这里重复调用toast显示,系统会判断这个toast的id,如果队列中有这个
* toast,则将toast的显示的view和显示时长更新下(这里只是更新了文字)
* 重新显示,并重新计时。
* 主要是用在一些可能重复点击的地方,如果每次新建一个toast,则会将
* toast放到队列中,每个都会执行,当你点击很多次后,返回到别的页面,
* 依然会看到有之前点击产生的toast弹出,影响体验
*/
toast.setText(msg);
toast.show();
}
}
toast_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/hahaBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="click me to show a 哈哈" />
<Button
android:id="@+id/gagaBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="click me to show 嘎嘎嘎" />
</LinearLayout>
运行顺序是点击第一个按钮显示"哈哈",立马点击第二个按钮,能看到Toast的消息立刻变成“嘎嘎嘎嘎嘎嘎”,而且这次的toast的显示时间是重新计时的。
Toast和Notification差不多,用到的是一个类。都是将一个消息入队列,然后队列中的消息挨个显示。
Toast的cancel方法这里不推荐用,除非你想立即关闭这个Toast。试过,调用Toast::cancel,会将该Toast取消掉,但是有些机型还是会等待这个Toast的时间完毕后,才显示后续队列中的Toast。

- 大小: 26.2 KB

- 大小: 26.5 KB
分享到:
相关推荐
然而,在某些情况下,我们可能会遇到`Toast`重复显示的问题,这可能是由于不当的调用或者多线程环境中的并发问题导致的。本文将深入探讨这个问题,并提供解决方案。 首先,我们要理解`Toast`的工作原理。`Toast`在...
2. **使用Handler和Runnable**:创建一个Handler实例,每次显示Toast时都发送一个Runnable到MessageQueue,当之前的Toast结束时,Handler会移除这个Runnable,防止重复显示。 ```java private Handler handler = new...
使用全局变量存储`Toast`实例,及时取消不需要的`Toast`,以及在创建新`Toast`前进行判断,都是避免`Toast`重复的有效策略。同时,自定义`Toast`的样式可以进一步提升应用的用户体验。在实际开发中,应根据项目需求...
同时,通过在Application级别处理,可以确保Toast在整个应用中的统一性,避免在各个Activity中重复设置。在"自定义Application级别toast Demo"中,我们将学习如何实现这一功能,并且该Demo已经实现了对Android 7及更...
使用工具类可以避免代码重复,提高开发效率。例如,一个简单的`ToastUtil`工具类可能包含如下方法: ```java public class ToastUtil { public static void showShort(Context context, String message) { Toast....
在我们的toast控件中,使用单例模式可以确保在整个应用程序中只有一个toast实例存在,避免了重复创建和管理多个相同toast对象的麻烦。 接下来,我们将讨论如何在Qt中创建toast控件。这通常涉及到以下步骤: 1. **...
为了方便地使用Toast功能,并避免代码重复编写,本篇将介绍一个自定义的Toast工具类——`ToastUtil`。该工具类能够帮助开发者更加便捷、高效地管理与使用Toast。 #### 二、核心功能 1. **统一样式**:通过自定义...
- **代码复用**:避免在多个地方重复创建和显示`Toast`。 - **简洁的API**:只需要调用静态方法即可,不需要每次创建`Toast`对象。 - **线程安全**:通过单例模式(这里使用了静态内部类的懒汉式)保证了在多线程...
5. **创建自定义Toast类**:为了方便重复使用,可以创建一个扩展Toast类的自定义类,比如`CustomToast`,并在其中封装自定义显示逻辑。这个类可以接收自定义布局和参数,然后使用`setView()`方法设置视图,并调用`...
6. **延时与重复设置**:开发者可以自定义`Toast`的显示时长,以及是否需要连续显示多次,增强了消息提示的灵活性。 7. **易用性**:使用Muddz-StyleableToast非常简单,只需几行代码即可创建一个美观的`Toast`,...
- `show()` 方法中,`enqueueToast()` 是通过系统服务 `INotificationManager` 来实现 `Toast` 的显示,这表明 `Toast` 实际上是利用了系统通知机制。 - `cancel()` 方法用于取消正在显示或尚未显示的 `Toast`,...
3. 当需要在其他方法(如onStart())中显示Toast时,重复上述步骤,确保每次都使用主线程的Handler。 这样,即使在Service中,我们也可以正确地显示Toast。请注意,这种方法适用于那些需要在后台运行且需要与用户...
下面将详细介绍如何使用`PopupWindow`来创建一个自定义`Toast`以及如何实现防止重复信息显示的功能。 首先,我们需要创建一个`PopupWindow`实例,并为其设置内容视图。内容视图可以是任何自定义布局,例如,我们...
4. 封装成工具类:为了方便重复使用,可以将上述代码封装成一个静态方法,这样在其他地方只需调用这个方法即可快速创建自定义Toast。 ```java public class CustomToast { public static void show(Context ...
为了方便重复使用,我们可以创建一个`ToastUtil`工具类,封装上述逻辑。这个工具类可以包含静态方法,接收`Context`、文本和图片资源作为参数,返回自定义`Toast`对象。这样,在整个应用中调用这个工具类就足够简单...
在实际项目中,使用这样的`ToastUtils`工具类可以帮助开发者快速地创建和展示`Toast`,减少重复代码,提高开发效率。通过理解和适当地使用这个工具类,我们可以让应用的反馈更加直观和人性化,同时保持代码的简洁和...
2. **防止Toast重复显示**:确保每次只调用一次`show()`方法,避免在循环、事件监听器或其他可能导致重复调用的地方创建多个Toast实例。可以使用变量记录Toast是否正在显示,或者使用`cancel()`方法取消正在显示的...
为了避免重复创建`Toast`对象,我们检查`toast`是否为空,如果为空则创建新的`Toast`,否则直接设置新的视图。最后调用`show`方法显示`Toast`。 ```java public class CustomerToast { static Toast toast; ...
为了解决这个问题,我们可以自定义一个`ToastUtil` 工具类,确保同一时间只有一个`Toast` 显示,避免重复弹出。 下面我们将详细解析如何创建这样一个自定义`ToastUtil` 工具类: 首先,我们看到`ToastUtil` 类中有...