2011-07-25 98 views
0

可能是一个相当简单的问题,但我似乎无法理解为什么会添加任何onClickListeners。 (我似乎也得到类似的崩溃时,将文本更改侦听器添加到EditText框,这让我觉得我一直在设置错误?)添加onClickListener时崩溃

我遵循基本的Android开发人员的东西,创建一个onClickListener为以下...

 mPickDate.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

但是,我想创建监听器,然后有一个onCreate方法来执行代码。

这是我这是当我运行它

package com.chris.formStuff; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class FormStuffActivity extends Activity implements OnClickListener { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // Create the view 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Load all views. 
    //EditText edtText1; 
    Button btnChange1; 

    // And find all views in the relevant layout file 
    //edtText1=(EditText) findViewById(R.layout.main); 
    btnChange1 = (Button) this.findViewById(R.layout.main); 

    btnChange1.setOnClickListener((OnClickListener) this); 
} 
@Override 
public void onClick(View v) 
{ 
    Context context = getApplicationContext(); 
    CharSequence text = "Hello toast!"; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
} 
} 

而且logcat的输出电流崩溃设置...

 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861): FATAL EXCEPTION: main 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chris.formStuff/com.chris.formStuff.FormStuffActivity}: java.lang.ClassCastException: com.chris.formStuff.FormStuffActivity 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.os.Looper.loop(Looper.java:144) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at dalvik.system.NativeStart.main(Native Method) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861): Caused by: java.lang.ClassCastException: com.chris.formStuff.FormStuffActivity 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at com.chris.formStuff.FormStuffActivity.onCreate(FormStuffActivity.java:25) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751) 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):  ... 11 more 
+0

btnChange1.setOnClickListener((OnClickListener)this);尝试删除转换为OnClickListener –

回答

1

你在这一行

btnChange1 =(按钮)this.findViewById(R.layout.main)会错;

意味着你需要找到的ID代替布局

相同此行

btnChange1 =(按钮)this.findViewById(R.id.button);

+0

非常简单的问题答案,谢谢。 “应用程序”,如果它可以被称为现在正在工作。 – Chris

+0

您最欢迎亲爱的,并享受android –

3

变化 btnChange1 = (Button) this.findViewById(R.layout.main);

btnChange1 = (Button) this.findViewById(R.id.buttonchange_id);

其中buttonchange_id是主要布局btnChange1的ID

1

你的按钮必须被发现ID main.xml中内,在那里R.layout.main不是他的ID。

btnChange1 = (Button) this.findViewById(R.layout.nameofthebuttoninsidethexml); 
0

你的错误是根据你的堆栈跟踪在这一行: (Button) this.findViewById(R.layout.main);显然R.layout.main不是一个按钮。

2

每个人都已经快指出你的问题是该行

btnChange1 = (Button) this.findViewById(R.id.buttonchange_id); 

他们是正确的,这将解决这个问题你。但是如果你想避免未来的问题,最好让你理解为什么。

logcat通常会使修复错误非常简单。当你得到一个错误,logcat的输出通常是这样的

07-25 13:19:10.593: ERROR/AndroidRuntime(22861): FATAL EXCEPTION: main 
ERROR/AndroidRuntime(22861): java.lang.RuntimeException: /some sort of error/ 
    .../A lot of description/ 
    ... 
07-25 13:19:10.593: ERROR/AndroidRuntime(22861): Caused by: /Whatever the specific error was/ 
    07-25 13:19:10.593: ERROR/AndroidRuntime(22861):at com.chris.formStuff.FormStuffActivity.onCreate(FormStuffActivity.java:25) 
    ... 
    ... 

当你得到象这样的错误,你要看看“引起的......”行,之后的前几个。这将描述错误并给出它发生的确切路线。在你的情况下,你的FormStuffActivity中第25行的错误是一个“ClassCastException”。然后,当你看第25行时,你可以看到你必须将某些东西投射到Button上,事实上并不是Button(正如其他人所说的那样)。

如果错误是第406行的NullPointerException,那么您应该知道要在该行上查找未正确初始化的变量。 logcat是一个非常强大的调试工具,如果你学会了如何使用它,你可以在几秒钟内修复这样的小型语法类型的错误。