Как предотвратить двойной запуск кода, дважды щелкнув по кнопке в Android

Если я быстро нажимаю на свою кнопку в своем приложении для Android, кажется, что код за ней работает дважды. Если я дважды нажимаю на кнопку меню, действие, которое должно быть запущено onclick, запускается дважды, и я должен дважды выйти из него.

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

Что я могу сделать с этой проблемой?

Я использую простые onClickListeners и кнопки

РЕДАКТИРОВАТЬ:

Что касается ответов и комментариев, мои кнопки меню выглядят так:

top20Button.setOnClickListener(new OnClickListener() { public void onClick(View v) { favButton.setClickable(false); nearButton.setClickable(false); highlightedButton.setClickable(false); top20Button.setClickable(false); Intent i = new Intent(); i.putExtra("showDialog", false); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); i.setClass(Search.this, Top20.class); startActivity(i); finish(); } }); 

После всего этого исправления все еще одно и то же: S Когда я нажимаю как сумасшедший человек, несколько активных элементов находятся в стеке истории, и я должен уйти несколько раз.

Какие-либо предложения ? Что делать не так?

Вы можете использовать следующий код: btn.setEnabled (false);

 btn.setOnclickListener(new View.onClickListener(){ public void onClick(View v) { btn.setEnabled(false); } }); 

Вы можете временно отключить просмотр

 public static void disableTemporarly(final View view) { view.setEnabled(false); view.post(new Runnable() { @Override public void run() { view.setEnabled(true); } }); } 

Ну, это ожидаемое поведение …

Запустите новую акситивность с помощью флага SINGLE_TOP

Или попробуйте установить android:launchMode="singleInstance" для активности Top20 в вашем AndroidManifest.xml

Это решает проблему нескольких экземпляров активности и по-прежнему воспроизводит анимацию по умолчанию

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Это решение лучше соответствует моим требованиям. Вместо этого используйте функцию включения / выключения просмотра. Я использую время, во-первых, создаю переменную для хранения последнего пользователя, нажавшего на это окно *, а затем, когда пользователь нажимает на представление, фиксирует время в переменной, чтобы сравнить текущий момент и последний раз, когда пользователь нажал вид, Если дифференциальное время между временами слишком мало, что означает быстрый или очень быстрый, просто игнорируйте его и все. Но если это разумное время для вас, установите последнюю переменную времени с текущим временем и сделайте все, что хотите.

 @Override public void onListItemClick(ListView list, View item, int position, long id) { Long now = System.currentTimeMillis(); if((now - lastTimeSelected) > 500){ lastTimeSelected = now; // your code goes here } else { Log.i(TAG, "Too fast!"); } } 

Я видел подобный ответ на другом посту, но никто не любит такой подход.

Добавьте следующий код snipet в определение своей деятельности в Androidmanifest.xml

 android:launchMode = "singleTask" 

Используйте frozen переменную внутри класса Application .

То есть

 public class App extends Application { public static boolean frozen = false; } 

Где-то, когда нажимают:

 //... onClick() { if (frozen) { return; } frozen = true } //... 

Где-то выпустить, например, когда была запущена новая активность

 onCreate (...) { super.onCreate(...); frozen = false; } 

В AndroidManifest.xml :

 <application android:allowBackup="true" android:largeHeap="true" android:name="com.example.App" android:icon="@drawable/icon" android:label="@string/app_alias" android:theme="@style/AppTheme" > 
Intereting Posts
InApp Купить контентную совместимость на нескольких мобильных платформах (iOS и Android). Android game loop vs обновление в потоке рендеринга Почему ImageView не отображается в полноэкранном режиме? Импорт данных из бесплатного приложения db в платное приложение db Имеет ли Android какой-либо API для предоставления даты-времени в качестве ввода от пользователя (startActivityForResult)? Как установить фон формы в xml? Могу ли я использовать Wi-Fi для передачи данных / сообщений между двумя телефонами Android, не подключенными к маршрутизатору? Как открыть PDF-файл, хранящийся в папке res / raw или assets? Android: «попытка использования переработанного растрового изображения» с временными растровыми изображениями Автоматически входить в аккаунт Google на веб-сайте Android Скрыть TabLayout на прокрутке содержимого вместо ToolBar Как добавить анимацию в текстовое представление в Android Как вернуть String или JSONObject из асинхронного обратного вызова с помощью Retrofit? Постоянная сила сигнала Bluetooth LE на Android Marsmallow: изменение разрешений при запуске приложения с ошибками