无法从NavigationDrawerFragmet启动首选项屏幕



我已经从文件>新建>Android应用程序项目创建了NavigationDrawer活动。我选择导航抽屉活动,一切顺利,直到我需要启动首选项屏幕。应用程序崩溃。到目前为止我所拥有的:

主要活动:

...
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);
    }
}

请注意,我不想要内联偏好,而是喜欢新活动的偏好。

09-22 13:57:57.125:W/EGL_genymotion(2120):eglSurfaceAttrib未实现09-22 13:57:57.125:E/OpenGLRenderer(2120):从GradienCache获取MAX_TEXTURE_SIZE09-22 13:57:57.137:E/OpenGLRenderer(2120):从缓存获取MAX_TEXTURE_SIZE::initConstraints()09-22 13:57:57.137:D/OpenGLRenderer(2120):启用调试模式009-22 13:58:00-245:D/AndroidRuntime(2120):关闭VM09-22 13:58:00.249:W/dalvikvm(2120):线程ID=1:线程退出,出现未捕获的异常(组=0xa4ba8648)09-22 13:58:00.273:E/AndroidRuntime(2120):致命异常:main09-22 13:58:00.273:E/AndroidRuntime(2120):android.content.ActivityNotFoundException:找不到显式活动类{ba.arnes.aconverter/ag.android.aconvert.Preferences};您是否在AndroidManifest.xml中声明了此活动?09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.Activity.startActivityForResult(Activity.java:3390)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.Activity.startActivityForResult(Activity.java:3351)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.Activity.startActivity(Activity.java:3587)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.Activity.startActivity(Activity.java:3355)09-22 13:58:00.273:E/AndroidRuntime(2120):在ag.android.aconvert.MainActivity.onClick(MainActivity.java:545)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.view.view.performClick(view.java:4240)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.view.view$PerformClick.run(view.java:17721)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.os.Handler.handleCallback(Handler.java:730)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.os.Handler.dispatchMessage(Handler.java:92)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.os.Looper.loop(Looper.java:137)09-22 13:58:00.273:E/AndroidRuntime(2120):在android.app.ActivityThread.main(ActivityThreads.java:5103)09-22 13:58:00.273:E/AndroidRuntime(2120):位于java.lang.reflect.Method.invokeNative(Native Method)09-22 13:58:00.273:E/AndroidRuntime(2120):在java.lang.reflect.Method.ioke(Method.java:525)09-22 13:58:00.273:E/AndroidRuntime(2120):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)09-22 13:58:00.273:E/AndroidRuntime(2120):在com.android.internal.os.ZygoteInit.main(ZygoteNit.java:553)09-22 13:58:00.273:E/AndroidRuntime(2120):在dalvik.system.NativeStart.main(Native方法)09-22 13:58:01.841:I/Process(2120):发送信号。PID:2120 SIG:9

您在AndroidManifest.xml中缺少Activity声明。

正如它所说:

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

无法找到首选项

编辑:

看起来您正在尝试启动Activity,而您的首选项类是Fragment。因此,基本上您需要一个"活动"类,在布局中您有片段的占位符(例如您的Preferences类)。

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);
        }
    }
}

布局可能是这样的:

<FrameLayout
    android:id="@+id/holder"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

不要忘记将活动添加到AndroidManifest.xml:

<activity android:name=".PrefenecesActivity" />

然后你可以使用你的代码:

case R.id.bSettings:
Intent settingsActivity = new Intent(getBaseContext(), PrefenecesActivity.class);
startActivity(settingsActivity);
break;

vilpe89:谢谢你,伙计!你做得对,只要一点点改变。。。

AndroidManifest.xml应该是:

<activity android:name="add.full.name.PrefenecesActivity" />

而不是:

<activity android:name=".PrefenecesActivity" />

最新更新