Basic Android: как обрабатывать действие isPressed на кнопке в Android

Я написал рабочий код с помощью isEnabled ().

    if(btn.isEnabled()){    
        btn.setOnClickListener(new View.OnClickListener() {    

        @Override  
        public void onClick(View v) {   
   //say send a udp packet  
        }  
        }  

    );  
    }  

Теперь вместо пакета, который нужно отправить при нажатии кнопки, я хочу отправить его, когда он будет нажат. Как я могу справиться с этим? когда я попытался isPressed вместо isEnabled, был пустой экран, и активность даже не отображалась ...

EDIT: также попытался btn.isPressed() - он не работает ... пакет udp отправляется сразу после нажатия кнопки ... Я хочу, чтобы он отправлял ТОЛЬКО, когда я нажимаю его ...

Любая помощь будет оценена по достоинству. благодаря

0
Вы имеете в виду, что хотите что-то сделать, когда пользователь нажимает кнопку, И держит палец на нем так? Просьба уточнить.
добавлено автор Macondo2Seattle, источник
пакет udp отправляется сразу после нажатия кнопки ... Я хочу, чтобы он отправлял ТОЛЬКО, когда я нажимаю его ... Я не хочу никаких действий при нажатии ... только когда он держит палец на нем. .. помощь
добавлено автор Zac Efron, источник

3 ответы

ваше состояние неопределенное. «ТОЛЬКО, когда я нажимаю это», это означает, что вы начнете отправку при нажатии кнопки, что будет означать на MotionEvent.ACTION_DOWN . если вы хотите получить некоторую задержку до того, как действие будет выполнено, создайте поток таймера, который начнется, когда будет обнаружен MotionEvent.ACTION_DOWN , и выполнит ваше действие через несколько секунд. таймер также должен быть сброшен, когда обнаружен MotionEvent.ACTION_UP , или если действие уже выполняется, прервите действие.

но, честно говоря, вы можете перефразировать свое состояние.

1
добавлено
это похоже на правильное решение вашей заявленной проблемы ... вы уверены, что реализуете ее так, как показывался другой пример?
добавлено автор Genia S., источник
ИЛИ, вы ищете OnLongClickListener?
добавлено автор josephus, источник
как я упоминал в своем ответе, «или если действие уже выполняется, прервите действие». также, как бы вы это узнали, это не просто «щелкнули» без таймера?
добавлено автор josephus, источник
вы можете следовать этому примеру, как сделать таймер обратного отсчета dewful.com/?p=3
добавлено автор josephus, источник
вместо таймера я мог бы завершить соединение UDP ... но это кажется неэффективным? ... Я думаю, что он «сформулирован» отлично.
добавлено автор Zac Efron, источник
Я использую onTouchListener и MotionEvent.ACTION_DOWN. Зачем нужен OnLongClickListener
добавлено автор Zac Efron, источник
Я перечитаю вопрос и, возможно, уточню: «Можно ли отправлять пакеты (подумать голосом), когда кнопка нажата, а затем прекратить соединение, когда кнопка переадресуется?»
добавлено автор Zac Efron, источник
правильный ... пример код?
добавлено автор Zac Efron, источник

Вы захотите использовать onTouchListener вместо onClick и прочее. Небольшие изменения, которые вы также хотите отслеживать, когда пользователь отпускает.

EDIT adding timer stuff

Timer timer;
UDP request;
btn.setOnTouchListener(new OnTouchListener(){

     public boolean onTouch(View v, MotionEvent event){
         if(event.getAction() == MotionEvent.ACTION_DOWN){
             //TODO start sending udp in background
             timer = new Timer();
             timer.schedule(new TimerTask(){
                public void run(){
                    request.start();
                }
             },DELAY_MS);

         }
         if(event.getAction() == MotionEvent.ACTION_UP){
             //TODO stop sending udp
             timer.cancel()

             if(request.isTransmitting()){ 
                request.stop();
             }
         }
         //needed to get both calls
         return true;
     }
});
0
добавлено
используя выше, просто определите таймер в действии вниз и отмените его при действии. вам также захочется добавить некоторую форму отмены на запрос не только таймера. поэтому вам понадобится запрос и таймер в качестве переменных класса.
добавлено автор caguilar187, источник
Нет, опять же!
добавлено автор Zac Efron, источник

Не уверен, что это сработает, но стоит попробовать

@Override
        public void onClick(View v) {
           //TODO Auto-generated method stub
            if(v.isPressed()){
            //do sth.   
            }
            else{
            //do sth. else  
            }

        }
0
добавлено
Нет. Это не сработало. Должно ли это быть внутри setOnclickListener? if (btnTalk.isEnabled ()) {btnTalk.setOnClickListener (новый View.OnClickListener() {@Override public void onClick (View v) {if (v.isPressed ()) {???!
добавлено автор Zac Efron, источник
Также попробовал btn.isPressed() - он не работает ... пакет udp отправляется сразу после нажатия кнопки ... Я хочу, чтобы он отправлял ТОЛЬКО, когда я нажимаю его ...
добавлено автор Zac Efron, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async

Android Rus
Android Rus
68 участник(ов)