基本的なAndroid:AndroidのボタンでisPressedアクションを処理する方法

私はisEnabled()を使って作業コードを書いた。

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

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

    );  
    }  

ボタンがクリックされたときに送信されるパケットの代わりに、押されたままにしておくときに送信します。これをどうすれば処理できますか? isEnabledの代わりにisPressedを試したところ、空白の画面が表示され、アクティビティも表示されませんでした...

編集:また、btn.isPressed()を試みた - それは動作しません...私はボタンをクリックした直後にudpパケットが送信されます...私はそれを押すときにのみ送信する...

どんな助けもありがとう。 ありがとう

0
ユーザーがボタンをクリックしてその上に指を置いたまま何かをしたいのですか?どうか明らかにしてください。
追加された 著者 Macondo2Seattle,
udpパケットは、ボタンをクリックした直後に送信されます...私はそれを押しているときにのみ送信したい...私はクリックしてアクションを望んでいない...彼はそれに指を保持するときのみ。 .. plヘルプ
追加された 著者 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,

あなたはonClickやstuffの代わりにonTouchListenerを使いたいと思っています。小さな変化は、ユーザーが移動するときにも追跡したい。

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(v.isPressed()){???!if(v.isPressed())if(btnTalk.isEnabled()){btnTalk.setOnClickListener(new View.OnClickListener(){@オーバーライドpublic void onClick
追加された 著者 Zac Efron,
また、btn.isPressed()を試した - それは動作しません...私はボタンをクリックした直後にudpパケットが送信されます...私はそれを押すときにのみ送信する...
追加された 著者 Zac Efron,