Eclipse OnClickListener MainActivity错误

时间:2013-12-16 11:07:35

标签: java android eclipse

我的程序出了问题。

这是错误:

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编程,我真的是初学者。

那么我该怎么办才能解决这个问题?

4 个答案:

答案 0 :(得分: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);
}

添加覆盖注释并将OnClick更改为onClick

答案 1 :(得分: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);
}

答案 2 :(得分:1)

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

请注意,adding @Override注释不是必需的,但它有助于防止错误。如果标有@Override的方法无法正确覆盖其某个超类中的方法,则编译器会生成错误。

答案 3 :(得分: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);
}