2011-11-12 40 views
0

isEnabled()を使用して作業コードを書きました。基本的なAndroid:AndroidのボタンでisPressedアクションを処理する方法

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

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

    ); 
    } 

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

EDIT:やってみましたbtn.isPressed() - うまくいきません。私がボタンをクリックした直後に送信されます...私はそれを押しているときに送信するだけです...

助けていただければ幸いです。これが機能するかどう おかげ

+2

ユーザーがボタンをクリックしたときに何かしたいのですが、その上に指を置いていますか?どうか明らかにしてください。 – Macondo2Seattle

+0

ボタンをクリックした直後にudpパケットが送信されます...私はそれを押しているときにだけ送信したい...クリック時には何もしたくない... plヘルプ –

答えて

0

わからないが、

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

     } 
+0

いいえそれは動作しませんでした...それはsetOnclickListenerの内部にあるはずですか? (btnTalk.isEnabled()){ \t \t \t btnTalk.setOnClickListener(新View.OnClickListener(){ \t \t \t \t \t \t @Override \t \t \tます。public void onClickの(ビューV){場合 \t \t \t \t if(v.isPressed()){???! –

+0

もbtn.isPressed()を試みました - うまくいきません...ボタンをクリックした直後にudpパケットが送信されます...したい私はそれを押しているときにのみ送信... –

0

あなたが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

いいえ、同じ結果のAGAに! –

+0

上記を使用すると、動作中のタイマーを定義し、動作時にはそれをキャンセルします。また、タイマーだけでなく、リクエストにキャンセルのフォームを追加したい場合もあります。リクエストとタイマーをクラス変数として使用するようになります。 – caguilar187

1

あなたの条件が曖昧です。 「私が押しているときだけ」は、ボタンが押されたときに送信を開始することを意味します。これは、MotionEvent.ACTION_DOWNを意味します。アクションが実行されるまでに少し時間がかかる場合は、MotionEvent.ACTION_DOWNが検出されたときに起動するタイマースレッドを作成し、数秒後にアクションを実行します。タイマーはMotionEvent.ACTION_UPが検出されたときにもリセットされる必要があります。または、アクションがすでに進行中の場合は、アクションを中断してください。

正直なところ、あなたの状態を言い換えるとよいでしょう。

+0

これはあなたの述べられた問題に対する正しい解決策のようです...他の例が示されたように実装していますか? –

+0

または、OnLongClickListenerをお探しですか? – josephus

+0

の代わりに、私はUDP接続を終了することができました...しかし、それは非効率的なようですか?...私はそれが完全に「表現」されていると思います。 –

関連する問題