2013-12-16 36 views
0

我的程序出了问题。Eclipse OnClickListener MainActivity错误

这里的错误:

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

下面的代码:

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

我刚开始编程与eclipse,我真的是初学者。

那么我需要做些什么来解决这个问题呢?

回答

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接口提供的所有方法。 当你实现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是一个接口。你必须实现这个接口提供的所有方法。

我认为这是你想要做什么在这里:

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

注意adding不需要@Override注解,但是它有助于防止错误。如果标记为@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); 
}