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()方法内,则可以解决此问题。