3

我是一個相對較新的Java/Android編程初學者。我一直在努力,當我在應用程序中按下給定按鈕時,它會產生DTMF音調,但是當我嘗試使用setOnTouchListener時,Android Studio會向我顯示該錯誤。這也讓我對MotionEvent的錯誤,指出表達預計無法解析符號'setOnClickListener' - AndroidStudio

這裏是代碼的重要部分:

boolean pressedCCW = false; 
    class SendCCWTone extends AsyncTask<Void,Void,Void>{ 
     @Override 
     protected Void doInBackground(Void... arg0){ 
      ToneGenerator toneGen; 
      toneGen = new ToneGenerator(AudioManager.STREAM_DTMF,100); 
      while(pressedCCW){ 
       toneGen.startTone(ToneGenerator.TONE_DTMF_1); 
      } 
      toneGen.stopTone(); 
      toneGen.release(); 
      createLog("CCW"); 
      return null; 
     } 
    } 

final Button buttonCCW = (Button) findViewById(R.id.counter_clockwise); 
    buttonCCW.setOnTouchListener(new View.OnTouchListener(){// Where the error is 
     @Override 
     public boolean onTouch(View v, MotionEvent event){// Where the other error is located 
      switch (event.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        if(pressedCCW == false){ 
         pressedCCW = true; 
         new SendCCWTone().execute(); 
        } 
        break; 
       case MotionEvent.ACTION_UP: 
        pressedCCW = false; 
      } 
      return true; 
     } 
    }); 

回答

1

您正在創建OnTouchListenersetOnClickListener內。如果您需要TouchListener,那麼你應該使用註冊的setOnTouchListener代替setOnClickListener

buttonCCW.setOnTouchListener(new View.OnTouchListener(){ 
     @Override 
     public boolean onTouch(View v, MotionEvent event){ 
      switch (event.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        if(pressedCCW == false){ 
         pressedCCW = true; 
         new SendCCWTone().execute(); 
        } 
        break; 
       case MotionEvent.ACTION_UP: 
        pressedCCW = false; 
      } 
      return true; 
     } 
    }); 
-1

嘗試將此添加到您的代碼:

implements View.OnTouchListener 

,並使用setOnTouchListner代替setOnClickListener。

buttonCCW.setOnListener(new View.OnTouchListener(){// Where the error is 
    @Override 
    public boolean onTouch(View v, MotionEvent event){// Where the other error is located 
     switch (event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       if(pressedCCW == false){ 
        pressedCCW = true; 
        new SendCCWTone().execute(); 
       } 
       break; 
      case MotionEvent.ACTION_UP: 
       pressedCCW = false; 
     } 
     return true; 
    } 
}); 
+0

Sushrita,我應該在哪裏把'實現View.OnTouchListener'? 謝謝! :) – alexvandv

+0

在你的課堂開始像這樣:'public class MainActivity extends ActionBarActivity implements View.OnTouchListener {' – Sushrita

-1

而不是使用setOnClickListener,您可以在XML和點的方法(它做同樣的事情,看起來更好)設定的onClick。在這種情況下,你必須像produceSound的方法:

public void produceSound(View view) { 
    // your onClick method 
} 

,並在活動中的XML,找到此按鈕,counter_clockwise,是並添加:android:onClick="produceSound"到按鈕的XML。

這裏更多,如果你很好奇:How exactly does the android:onClick XML attribute differ from setOnClickListener?

但是,如果你使用onTouch,那麼你就必須堅持別人都在提示。 XML不支持android:onTouch屬性。

+0

是的,在這種情況下,我正在使用onTouch,因爲我希望讓應用程序產生的聲音,而按鈕被按下。 謝謝! – alexvandv

+0

如果您已經解決了問題,請發佈您的答案 - 僅供其他可能需要此參考的人員使用。 (和往常一樣沒有問題。) – wkcamp

+0

肯定會做。 – alexvandv

0

如果您將setOnTouchListener放置在您的活動的onCreate()方法內,則可以解決此問題。