2011-07-25 97 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是一個非常強大的調試工具,如果你學會了如何使用它,你可以在幾秒鐘內修復這樣的小型語法類型的錯誤。