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