2013-07-09 34 views
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); 
} 

} 

回答

1

错误在行buttonUpdate.setOnKeyListener((OnKeyListener) this.buttonUpdate);。就像错误说的那样,你不能将一个按钮投射到OnKeyListener上。显式转换需要通过类层次关系 - Button和OnKeyListener不相关(OnKeyListener是一个接口)。

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

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

+0

实际上问题是SetOnKeyListener需要SetOnClickListener作为inbuttonUpdate.setOnClickListener(this); – JWDurbin

1

什么是你想实现什么?您已经实现OnClickListener所以如果你需要的是执行什么OnClick方法与OnClickListener内,只是改变

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

随着

buttonUpdate.setOnClickListener(this); 

或者,如果你想OnKeyListener做什么techiServices建议

+0

我相当肯定这个问题已经被大幅度改变了,这个答案比'Activity'实现了OnClickListener更合适。 +1 – techiServices

+0

感谢所有实际上问题是SetOnKeyListener需要SetOnClickListener作为inbuttonUpdate.setOnClickListener(this); – JWDurbin

相关问题