Базовый Android: как управлять нажатыми кнопками в Android - PullRequest
0 голосов
/ 12 ноября 2011

Я написал рабочий код, используя isEnabled ().

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

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

    );  
    }  

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

РЕДАКТИРОВАТЬ: также пробовал btn.isPressed () - не работает ... пакет udpотправляется сразу после нажатия на кнопку ... Я хочу, чтобы она отправлялась ТОЛЬКО при нажатии ...

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

Ответы [ 3 ]

1 голос
/ 12 ноября 2011

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

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

0 голосов
/ 12 ноября 2011

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

EDIT добавление таймера

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 голосов
/ 12 ноября 2011

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

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

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...