Cannot resolve symbol 'setOnClickListener' - AndroidStudio

Refresh

December 2018

Views

5.5k time

3

I'm relatively a rookie/beginner with Java/Android programming. I've been trying to make it so while I press a given button in my application it produces a DTMF tone, but when I try to use setOnTouchListener the Android Studio shows me that error. It also gives me an error for MotionEvent which states Expression expected

Here are the important parts of the code:

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;
        }
    });

4 answers

-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;
    }
});
-1

Вместо использования setOnClickListener, вы можете установить OnClick в XML и указать на метод (он делает то же самое , и выглядит лучше). В этом случае, вы бы метод , как produceSound:

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

и в XML своей деятельности, в найти , где эта кнопка, counter_clockwiseявляется и добавить: android:onClick="produceSound"к XML кнопки.

Больше здесь , если вам интересно: Как именно андроид: атрибут OnClick XML отличается от setOnClickListener?

Однако, если вы используете onTouch, то вам придется придерживаться того , что все остальные предположить. XML не поддерживает android:onTouchатрибут.

1

Вы создаете OnTouchListenerвнутри setOnClickListener. Если вам нужно , 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;
        }
    });
0

Эта проблема может быть решена, если вы размещаете setOnTouchListener внутри метода OnCreate () вашей деятельности.