3

Buttonクリックすると、 「 HelloToast 」というメッセージとともに が表示される があるとします。それを20 回繰り返しクリックすると、 s が非同期に表示され、それぞれの順番を待ちます。しかし、これは私が本当に望んでいるものではありません。ButtonToast

私が欲しいのは次のとおりです。 を押すたびにButton、前に表示されたものをキャンセルしてToast、実際のものを表示したいです。そのため、アプリを閉じたときに、ユーザーが非常に短い時間内に 100 回Toastクリックしてアプリを台無しにすることにした場合でも、 s は表示されません。Button

4

2 に答える 2

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.....;
            }

        });
    }

}
于 2013-03-28T23:33:51.403 に答える
0

これが別の解決策です。高速クリックで複数のトーストが表示されないようにすることだけが必要な場合は、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();
      }
   }
}

PendingIntent.FLAG_CANCEL_CURRENTについて読むことができます。

于 2013-03-29T00:04:16.677 に答える