有人可以解释一下我收到此错误的原因吗?
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);
}
}
答案 0 :(得分:1)
错误在行buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);
中。正如错误所示,您无法将按钮强制转换为OnKeyListener。显式转换需要通过类层次结构建立关系 - Button和OnKeyListener不相关(OnKeyListener是一个接口)。
如果要维护设置,可以创建一个扩展Button和Implements OnKeyListener的类。您必须编辑xml以使用自定义视图代替按钮。
答案 1 :(得分: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
答案 2 :(得分:1)
你想要完成什么?您已经实现了OnClickListener,所以如果您只需要使用OnClickListener执行onClick方法内部的内容,只需更改
buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);
使用
buttonUpdate.setOnClickListener(this);
或者,如果您希望OnKeyListener执行techiServices建议的