Android: быстрое нажатие кнопки приводит к нескольким случаям намерения - PullRequest
4 голосов
/ 16 марта 2012

В настоящее время я испытываю ошибку, из-за которой, если пользователь быстро нажимает на кнопку, намерение, к которому прикреплена кнопка, будет срабатывать несколько раз, в результате чего стек этого намерения будет нуждаться в повторном отслеживании.Как я могу избежать этого или исправить это?

Спасибо ~ k

Это внутри onClickListener.Я установил здесь логическое значение, а затем сбросил его в конце процесса.

        if(!isDating)
        {
            intent.setClass(context, EventDate.class);
            isDating = true;
            ((TabGroupActivity)
            context).startChildActivity("EventDate",intent);
        }

Ответы [ 4 ]

4 голосов
/ 16 марта 2012

Попробуйте установить флаги для намерения, как

intent.setFlags(FLAG_ACTIVITY_BROUGHT_TO_FRONT);

Вы также можете установить этот флаг через файл AndroidManifest.xml в разделе Приложения. Предпочитаю этот метод выше одного.

Обновление режима запуска с использованием файла манифеста

Надеюсь, это решит вашу проблему.

3 голосов
/ 16 марта 2012

Если бы у меня была копейка за эту ошибку, которую я подал в QA, я был бы довольно богат, если бы не миллионер: P Есть только так много, что можно сделать. На основании вашей реализации вы можете попробовать несколько вещей.

  1. Как уже упоминалось, используйте логическое значение. Установите его в true, как только вы нажмете на него, и проверьте этот логический параметр, если кнопка будет нажата снова. Установите значение false, как только вы закончите.

  2. Используйте диалоговое окно прогресса в случае, если это длительное действие, например получение данных в вашем следующем действии до его отображения. Это также дает подсказку пользователю, что что-то происходит, и ему не нужно беспокоиться.

2 голосов
/ 16 ноября 2012

использование

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

это решает проблему

1 голос
/ 20 марта 2012

На самом деле я нашел лучшее решение!

, установив onClickListener (null);затем воссоздавая его на Resume, он обходит необходимость использовать флаги, а что нет.

! K

...