0

有人可以解释为什么我会收到这个错误吗?

Java.lang.ClassCastException: android.widget.Button cannot be cast to     android.view.View$OnKeyListener

下面是java代码。我正在尝试按照教程进行操作,但无法开始。RAZR 模拟器只显示Unfortunately JimYamba quit working. 错误来自 Eclipse LogCat。

package com.example.jimyamba;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View.OnClickListener;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
import android.util.Log;;

public class MainActivity extends Activity implements OnClickListener{

    Button buttonUpdate;
EditText editStatus;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.status);

    buttonUpdate = (Button)findViewById(R.id.button_update);
    editStatus = (EditText) findViewById(R.id.edit_status);

    buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void onClick(View v){
    String statusText = editStatus.getText().toString();
    Log.d("StatusActivity","onClicked with text:"  + statusText);
}

}
4

3 回答 3

1

buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);

应该

buttonUpdate.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return false;
    }
});

看看http://developer.android.com/reference/android/view/View.OnKeyListener.html

于 2013-07-09T21:11:58.557 回答
1

错误在行中buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);。正如错误所说,您不能将按钮强制转换为 OnKeyListener。显式转换需要通过类层次结构建立关系 - Button 和 OnKeyListener 不相关(OnKeyListener 是一个接口)。

如果您想维护您的设置,您可以创建一个扩展 Button 并实现 OnKeyListener 的类。您将不得不编辑您的 xml 以让您的自定义视图代替按钮。

于 2013-07-09T21:08:59.930 回答
1

你想达到什么目的?您已经实现了 OnClickListener,所以如果您只需要使用 OnClickListener 执行 onClick 方法内部的内容,只需更改

buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);

buttonUpdate.setOnClickListener(this);

或者,如果您希望 OnKeyListener 执行 techiServices 的建议

于 2013-07-09T21:51:20.830 回答