Question

I sat with this problem for about a day, I'm trying to add a menu where I should be able to launch settings I'm trying to create an Android application which should work as a controller for a RC car. I managed to create the menu but everytime I click on settings it chrashes.

I have a lot of other code for the bluetooth connection and the controller itself, I don't know if it's relevant so I didn't post it but ask and I can post it :)

xml/preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory
        android:title="@string/pref_title_rc_settings"
        android:key="@string/pref_key_rc_settings">
        <CheckBoxPreference 
            android:key="@string/pref_key_antispin"
            android:summary="@string/pref_summary_antispin"
            android:title="@string/pref_title_antispin"
            android:defaultValue="true"/>
         <CheckBoxPreference 
             android:key="@string/pref_key_speedlimit"
             android:summary="@string/pref_summary_speedlimit"
             android:title="@string/pref_title_speedlimit"
             android:defaultValue="false"/>
         <CheckBoxPreference
             android:key="@string/pref_key_lysstyring"
             android:summary="@string/pref_summary_lysstyring"
             android:title="@string/pref_title_lysstyring"
             android:defaultValue="true"/>
         <CheckBoxPreference 
             android:key="@string/pref_key_kollisionssikring"
             android:summary="@string/pref_summary_kollisionssikring"
             android:title="@string/pref_title_kollisionssikring"/>
    </PreferenceCategory>    
</PreferenceScreen>

Main_Activity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
    case R.id.menu_settings:
        Intent options1 = new Intent(this, SettingsFragment.class);
        startActivity(options1);
        return true;
    default:
    return super.onOptionsItemSelected(item);
    }
}
public static class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}

menu/main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_settings"
        android:title="@string/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
</menu>

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Bluetooth</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main_">Main_Activity</string>
    <string name="title_activity_remote">Remote</string>
    <string name="action_settings">Settings</string>
    <!--  Settings kategori -->
    <string name="pref_key_rc_settings">settings_data</string>
    <string name="pref_title_rc_settings">Settings</string>
    <!--  Antispin  -->
    <string name="pref_key_antispin">antispin_data</string>
    <string name="pref_summary_antispin">antispin_summary</string>
    <string name="pref_title_antispin">Antispin</string>
    <!-- Fartbegrænser -->
    <string name="pref_key_speedlimit">speedlimit_data</string>
    <string name="pref_summary_speedlimit">speedlimit_summary</string>
    <string name="pref_title_speedlimit">Speed limiter</string>
    <!--  Lysstyring -->
    <string name="pref_key_lysstyring">lysstyring_data</string>
    <string name="pref_summary_lysstyring">lysstyring_summary</string>
    <string name="pref_title_lysstyring">Lightmode</string>
    <!--  Kollisionssikring -->
    <string name="pref_key_kollisionssikring">kollisionssikring_data</string>
    <string name="pref_summary_kollisionssikring">kollisionssikring_summary</string>
    <string name="pref_title_kollisionssikring">Collision protection</string>    
</resources>

logcat

04-16 11:24:51.882: D/libEGL(30759): loaded /system/lib/egl/libEGL_mali.so
04-16 11:24:51.882: D/libEGL(30759): loaded /system/lib/egl/libGLESv1_CM_mali.so
04-16 11:24:51.887: D/libEGL(30759): loaded /system/lib/egl/libGLESv2_mali.so
04-16 11:24:51.897: E/(30759): Device driver API match
04-16 11:24:51.897: E/(30759): Device driver API version: 23
04-16 11:24:51.897: E/(30759): User space API version: 23 
04-16 11:24:51.897: E/(30759): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct  9 21:05:57 KST 2013 
04-16 11:24:51.932: D/OpenGLRenderer(30759): Enabling debug mode 0
04-16 11:24:52.007: I/ActivityManager(30759): Timeline: Activity_idle id: android.os.BinderProxy@41d06e80 time:38223935
04-16 11:24:58.002: I/ActivityManager(30759): Timeline: Activity_launch_request id:com.test.bluetooth time:38229933
04-16 11:24:58.007: D/AndroidRuntime(30759): Shutting down VM
04-16 11:24:58.012: W/dalvikvm(30759): threadid=1: thread exiting with uncaught exception (group=0x41a13c80)
04-16 11:24:58.027: E/AndroidRuntime(30759): FATAL EXCEPTION: main
04-16 11:24:58.027: E/AndroidRuntime(30759): Process: com.test.bluetooth, PID: 30759
04-16 11:24:58.027: E/AndroidRuntime(30759): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.test.bluetooth/com.test.bluetooth.Main_Activity$SettingsFragment}; have you declared this activity in your AndroidManifest.xml?
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1636)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Activity.startActivityForResult(Activity.java:3432)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Activity.startActivityForResult(Activity.java:3393)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Activity.startActivity(Activity.java:3635)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Activity.startActivity(Activity.java:3603)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.test.bluetooth.Main_Activity.onOptionsItemSelected(Main_Activity.java:200)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.Activity.onMenuItemSelected(Activity.java:2608)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1065)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:177)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.widget.AbsListView.performItemClick(AbsListView.java:1137)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3048)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.widget.AbsListView$4.run(AbsListView.java:3789)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.os.Handler.handleCallback(Handler.java:733)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.os.Handler.dispatchMessage(Handler.java:95)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.os.Looper.loop(Looper.java:136)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at android.app.ActivityThread.main(ActivityThread.java:5088)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at java.lang.reflect.Method.invokeNative(Native Method)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at java.lang.reflect.Method.invoke(Method.java:515)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-16 11:24:58.027: E/AndroidRuntime(30759):    at dalvik.system.NativeStart.main(Native Method)

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.bluetooth"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".Main_Activity"
            android:label="RC-Remote" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
Was it helpful?

Solution

Intent options1 = new Intent(this, SettingsFragment.class); startActivity(options1);

Here you are trying to start an Activity using a Fragment http://developer.android.com/reference/android/preference/PreferenceFragment.html

OTHER TIPS

In your logcat: com.test.bluetooth/com.test.bluetooth.Main_Activity. It should be com.test.bluetooth.Main_Activity Rename activity name like this:

<activity
           android:name=".Main_Activity"
       ...
</activity>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top