我正在创建一个非常简单的应用程序,它必须在用户单击按钮时执行操作。我尝试使用OnClickListener执行此操作,但这会导致程序在运行时停止。我寻找不同的解决方案,但没有什么可以帮助我。 我发现问题位于我放置的行:Button.setOnClickListener
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(0x7f030000);
Button b = (Button) findViewById (0x7f05000a) ;
b.setOnClickListener((android.view.View.OnClickListener) buttonL) ;
}
private OnClickListener buttonL = new OnClickListener ( ) {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//perform action}
};
Logcat给出的错误:
02-04 19:45:46.101: E/AndroidRuntime(27043): FATAL EXCEPTION: main
02-04 19:45:46.101: E/AndroidRuntime(27043): java.lang.RuntimeException: Unable to start activity ComponentInfo{me.sms.smsReminder/me.sms.smsReminder.SmsReminderActivity}: java.lang.ClassCastException: me.sms.smsReminder.SmsReminderActivity$1
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.os.Looper.loop(Looper.java:150)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.ActivityThread.main(ActivityThread.java:4277)
02-04 19:45:46.101: E/AndroidRuntime(27043): at java.lang.reflect.Method.invokeNative(Native Method)
02-04 19:45:46.101: E/AndroidRuntime(27043): at java.lang.reflect.Method.invoke(Method.java:507)
02-04 19:45:46.101: E/AndroidRuntime(27043): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-04 19:45:46.101: E/AndroidRuntime(27043): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-04 19:45:46.101: E/AndroidRuntime(27043): at dalvik.system.NativeStart.main(Native Method)
02-04 19:45:46.101: E/AndroidRuntime(27043): Caused by: java.lang.ClassCastException: me.sms.smsReminder.SmsReminderActivity$1
02-04 19:45:46.101: E/AndroidRuntime(27043): at me.sms.smsReminder.SmsReminderActivity.onCreate(SmsReminderActivity.java:28)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
02-04 19:45:46.101: E/AndroidRuntime(27043): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
02-04 19:45:46.101: E/AndroidRuntime(27043): ... 11 more
谢谢,汤姆
答案 0 :(得分:2)
不要使用资源的文字ID,您应该使用:
R.id.your_id
R是一个动态生成的对象,用于保存您的资源。
例如,如果您在res / layout / main.xml中定义了TextView,那么:
<TextView
android:id="@+id/myTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Test Type"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/BLACK_TEXTCOLOR"
android:textStyle="bold" />
您可以将其引用为:
R.id.myTextView
我还建议您使用匿名类点击绑定:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.myLayoutId);
Button b = (Button) findViewById (R.id.myButton) ;
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//perform action
}
});
}
答案 1 :(得分:1)
您已导入并使用了错误的侦听器DialogInterface.OnClickListener。因此,当触发器被触发时,您的活动无法转换为DialogInterface,因此会出现错误。使用View.OnClickListener它应该可以工作。
答案 2 :(得分:0)
setContentView(0x7f030000);
Button b = (Button) findViewById (0x7f05000a) ;
强烈建议不要使用这些行。使用`R.id.buttonname'语法使代码不易出错。 你可以告诉第28行你的代码
直接实现onclick功能...
在按钮布局中,添加另一个参数
android:onclick="functionName"
在java活动文件中..然后创建一个这样的方法,
public void functionName(View v)
{
//Tasks to perform at on click event
}
答案 3 :(得分:0)
你可以双击那个buttonL确实是
android.view.View。 OnClickListener
而不是
android.content.DialogInterface.OnClickListener
(检查导入语句)
你也可以在b.setOnClickListener上放一个断点并检查buttonL的值/类型
答案 4 :(得分:0)
您正在使用DialogInterface.OnClickListener。您需要使用View.OnClickListener,它需要onClick(View v)函数,而不是onClick(DialogInterface arg0,int arg1)。
当您尝试将DialogInterface.OnClickListener转换为View.OnClickListener时,错误是一个类转换异常,因为一个用于对话框,后一个用于按钮。
同样如上所述,尝试使用R.它生成的原因是你应该使用它...