I have created NavigationDrawer activity from File>New>Android Application Project. I choose Navigation Drawer Activity and all goes well till I need to start Preference screen. Application crash. What I have so far:
Main Activity:
...
case R.id.bSettings:
Intent settingsActivity = new Intent(getBaseContext(), Preferences.class);
StartActivity(settingsActivity);
break;
...
Preferences.java:
public class Preferences extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Note that I don't want inline preference, but preference like new activity.
09-22 13:57:57.125: W/EGL_genymotion(2120): eglSurfaceAttrib not implemented 09-22 13:57:57.125: E/OpenGLRenderer(2120): Getting MAX_TEXTURE_SIZE from GradienCache 09-22 13:57:57.137: E/OpenGLRenderer(2120): Getting MAX_TEXTURE_SIZE from Caches::initConstraints() 09-22 13:57:57.137: D/OpenGLRenderer(2120): Enabling debug mode 0 09-22 13:58:00.245: D/AndroidRuntime(2120): Shutting down VM 09-22 13:58:00.249: W/dalvikvm(2120): threadid=1: thread exiting with uncaught exception (group=0xa4ba8648) 09-22 13:58:00.273: E/AndroidRuntime(2120): FATAL EXCEPTION: main 09-22 13:58:00.273: E/AndroidRuntime(2120): android.content.ActivityNotFoundException: Unable to find explicit activity class {ba.arnes.aconverter/ag.android.aconvert.Preferences}; have you declared this activity in your AndroidManifest.xml? 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.Activity.startActivityForResult(Activity.java:3390) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.Activity.startActivityForResult(Activity.java:3351) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.Activity.startActivity(Activity.java:3587) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.Activity.startActivity(Activity.java:3555) 09-22 13:58:00.273: E/AndroidRuntime(2120): at ag.android.aconvert.MainActivity.onClick(MainActivity.java:545) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.view.View.performClick(View.java:4240) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.view.View$PerformClick.run(View.java:17721) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.os.Handler.handleCallback(Handler.java:730) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.os.Handler.dispatchMessage(Handler.java:92) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.os.Looper.loop(Looper.java:137) 09-22 13:58:00.273: E/AndroidRuntime(2120): at android.app.ActivityThread.main(ActivityThread.java:5103) 09-22 13:58:00.273: E/AndroidRuntime(2120): at java.lang.reflect.Method.invokeNative(Native Method) 09-22 13:58:00.273: E/AndroidRuntime(2120): at java.lang.reflect.Method.invoke(Method.java:525) 09-22 13:58:00.273: E/AndroidRuntime(2120): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 09-22 13:58:00.273: E/AndroidRuntime(2120): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 09-22 13:58:00.273: E/AndroidRuntime(2120): at dalvik.system.NativeStart.main(Native Method) 09-22 13:58:01.841: I/Process(2120): Sending signal. PID: 2120 SIG: 9
You are missing the Activity declaration in AndroidManifest.xml.
As it says:
13:58:00.273: E/AndroidRuntime(2120): android.content.ActivityNotFoundException: Unable to find explicit activity class {ba.arnes.aconverter/ag.android.aconvert.Preferences}; have you declared this activity in your AndroidManifest.xml
Unable to find Preferences
EDIT:
Looks like you are trying to launch Activity
and your Preferences class is Fragment
. So basically you need an Activity class where in layout you have placeholder for fragment (e.g. your Preferences class).
public class PrefenecesActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle s) {
super.onCreate(s);
setContentView(R.layout.preferences);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.holder, new PreferencesFrag());
transaction.commit();
}
public static class PreferencesFrag extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
}
And the layout could look like this:
<FrameLayout
android:id="@+id/holder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Not to forget add the activity to AndroidManifest.xml:
<activity android:name=".PrefenecesActivity" />
THEN you can use your code:
case R.id.bSettings:
Intent settingsActivity = new Intent(getBaseContext(), PrefenecesActivity.class);
startActivity(settingsActivity);
break;