2013-12-16 4 views
0

내 프로그램에 문제가 있습니다. 여기Eclipse OnClickListener MainActivity 오류

The type MainActivity must implement the inherited abstract method View.OnClickListener.onClick(View) 

를 코드입니다 :

다음은 오류의 난 그냥 eclipse하여 프로그램

import android.os.Bundle; 
import android.app.Activity; 
import android.view.View.OnClickListener; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity implements OnInitListener, OnClickListener { 

    private TextToSpeech tts; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tts = new TextToSpeech(this, this); 
    } 

    public void OnClick (View view){ 
     EditText et = (EditText) findViewById (R.id.editText1); 
     tts.speak(et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
    } 

    public void onInit (int status){ 
     Button button = (Button) findViewById (R.id.button1); 
     button.setOnClickListener(this); 
     tts.setLanguage(Locale.GERMAN); 
     tts.setSpeechRate(1); 
    } 
} 

와 정말 초보자입니다.

그래서 문제를 해결하려면 어떻게해야합니까?

답변

2
The type MainActivity must implement the inherited abstract method View.OnClickListener.onClick(View) 

onClick(View)을 구현해야합니다. 구현되지 않았으므로 오류가 발생합니다.

@Override 
public void onClick (View view){ //OnClick You has O in caps 
EditText et = (EditText) findViewById (R.id.editText1); 
tts.speak(et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
} 

가 재정의 주석을 추가하고 onClickOnClick 변경에

그래서 변경합니다.

1

프로젝트를 청소 한 후,

당신은 OnClickListener를 인터페이스에서 제공하는 모든 메소드를 구현해야 다시 구축 할 수 있습니다. 당신의 onclick 방법은

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    EditText et = (EditText) findViewById (R.id.editText1); 
    tts.speak(et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
} 
1

OnClickListener 같은 overided해야 할 때 당신이 당신의 활동에 OnClickListener를 구현하는 인터페이스입니다. 이 인터페이스가 제공하는 모든 메소드를 구현해야한다.

나는 이것이 당신이 할 싶어 무엇을 생각 :

public void OnClick (View view){ 
    EditText et = (EditText) findViewById (R.id.editText1); 
    tts.speak(et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
} 

을하지만이 오른쪽 서명하지, 그것은해야한다 :

@Override 
public void onClick (View view){ //note the 'o' 
    EditText et = (EditText) findViewById (R.id.editText1); 
    tts.speak(et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
} 

@Override 주석이 필요하지 adding 것을 참고하지만, 오류를 예방하는 데 도움이됩니다. @Override으로 표시된 메소드가 수퍼 클래스 중 하나의 메소드를 올바르게 대체하지 못하면 컴파일러는 오류를 생성합니다.

1

거의 들었습니다! 메서드 이름을 onClick으로 변경하여 OnClickListener 인터페이스에 지정된대로 onclick 메서드를 구현합니다.

클래스가 인터페이스를 구현할 때 인터페이스에 나열된 각 메소드에 대한 구현을 제공해야합니다. 클래스 구현은 인터페이스에 지정된 서명 (이름, 인수, 반환 유형)과 일치해야합니다.

public void onClick (View view){ 
    EditText et = (EditText) findViewById (R.id.editText1); 
    tts.speak(et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
}