2013-02-12 123 views
0

由於某種原因,我的應用程序在啓動時崩潰..繼承人的所有代碼和調試輸出。在我看來,這件事情與我如何使用setOnCheckedChangeListener ..爲什麼setOnCheckedChangeListener?導致崩潰?

調試輸出:

02-12 05:12:03.048: E/AndroidRuntime(1464): FATAL EXCEPTION: main 
02-12 05:12:03.048: E/AndroidRuntime(1464): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dugley.check.in/com.dugley.check.in.MainActivity}: java.lang.ClassCastException: com.dugley.check.in.MainActivity cannot be cast to android.widget.CompoundButton$OnCheckedChangeListener 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.os.Looper.loop(Looper.java:137) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at dalvik.system.NativeStart.main(Native Method) 
02-12 05:12:03.048: E/AndroidRuntime(1464): Caused by: java.lang.ClassCastException: com.dugley.check.in.MainActivity cannot be cast to android.widget.CompoundButton$OnCheckedChangeListener 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at com.dugley.check.in.MainActivity.onCreate(MainActivity.java:21) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.Activity.performCreate(Activity.java:5104) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-12 05:12:03.048: E/AndroidRuntime(1464):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 

Main_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <Switch 
     android:id="@+id/switch1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:layout_marginBottom="30dp" 
     android:text="Service"/> 

</RelativeLayout> 

MainActivity.java:

package com.dugley.check.in; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.Switch; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Switch s = (Switch) findViewById(R.id.switch1); 

     if (s != null) { 
      s.setOnCheckedChangeListener((OnCheckedChangeListener) this); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     Toast.makeText(this, "The Switch is " + (isChecked ? "on" : "off"), 
         Toast.LENGTH_SHORT).show(); 
     if(isChecked) { 
      //do stuff when Switch is ON 
     } else { 
      //do stuff when Switch if OFF 
     } 
    } 

} 
+0

如果你得到了如下回答的答案,那麼你需要接受它。 – 2013-02-13 05:11:34

回答

3

你需要添加implements OnCheckedChangeListener與您的MainActivity

我做你的代碼的工作,請參見下面....

public class MainActivity extends Activity implements OnCheckedChangeListener{//Changed 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Switch s = (Switch) findViewById(R.id.switch1); 

    if (s != null) { 
     s.setOnCheckedChangeListener(this); // Changed 
    } 
} 
+0

當你實現任何監聽器時,它會通知你導入它的方法。 – 2013-02-12 05:22:52

1

你的應用程序崩潰,因爲你是鑄造你的聽衆回調您的活動。 這不是在android中實現回調的方法。

試試這個。

public class MainActivity extends Activity implements OnCheckedChangeListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Switch s = (Switch) findViewById(R.id.switch1); 

     if (s != null) { 
      s.setOnCheckedChangeListener(this); // note this 
     } 
    } 

    @override         // take a note 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     Toast.makeText(this, "The Switch is " + (isChecked ? "on" : "off"), 
         Toast.LENGTH_SHORT).show(); 
     if(isChecked) { 
      //do stuff when Switch is ON 
     } else { 
      //do stuff when Switch if OFF 
     } 
    } 
} 
0

所有你要的只是

1實施

implement OnCheckedChangeListener 

2變化

s.setOnCheckedChangeListener((OnCheckedChangeListener) this); 

s.setOnCheckedChangeListener(this); 
0

交換機繼承CompoundButton的屬性,所以我會建議OnCheckedChangeListener

mySwitch.setOnCheckedChangeListener(new OnCheckedChangedListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // Do Something 
    } 
});