假设您有Button
,只要您点击它,它就会显示Toast
,并显示消息“ Hello ”。
如果您决定重复点击Button
20次,Toast
将异步显示,轮流等待每个Button
。但是,这不是我真正想要的。
我想要的是以下内容:
每当我按下Toast
时,我希望它取消之前显示的Toast
并显示实际的Button
。因此,当我关闭应用时,如果用户决定在很短的时间内点击{{1}} 100次,就不会显示{{1}}。
答案 0 :(得分:6)
您需要在类级别声明Toast,然后在构造新的Toast对象并显示它之前调用toast.cancel()。
public class XYZ extends Activity {
Toast mToast;
public void onCreate(Bundle b) {
.....
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(mToast != null)
mToast.cancel();
mToast = Toast.makeText.....;
}
});
}
}
答案 1 :(得分:0)
这是另一种解决方案。如果你想要的只是为了防止显示快速点击多个toast,那么AlarmManager和PendingIntent的组合也应该起作用。现在请记住,我没有对此进行测试,也没有检查它是否编译。
AlarmManager mAlarm;
PendingIntent mPendingIntent;
//toast delay for a second
int toastDelay = 1000;
@Override
public void onCreate (Bundle savedInstanceState) {
Intent i = new Intent(context, MySimpleBroadcastReceiver.class);
//optionally set an action
i.setAction("show:toast");
mPendingIntent = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
}
public void onClick(View v) {
//set the alarm to trigger 1 second from current time
mAlarm.set(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis() + toastDelay), mPendingIntent);
}
@Override
protected void onDestroy () {
if (mAlarm != null) {
mAlarm.cancel(mPendingIntent);
}
mAlarm = null;
mPendingIntent = null;
}
创建广播接收器并记住将其添加到AndroidManifest.xml:
public class MySimpleBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive (Context context, Intent intent) {
//optionally check the action that triggered the broadcast..useful if you want to use this broadcast for other actions
if (intent.getAction().equals("show:toast")) {
Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show();
}
}
}