2013-02-12 130 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 
    } 
});