PreferenceFragment/Activity在导航返回时崩溃



我实现了一个简单的PreferencesFragment。但当用户导航回来时,应用程序就会崩溃。

偏好碎片类:

public class AppPreferencesActivityFragment extends PreferenceFragment {
public AppPreferencesActivityFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);
}

}

主办活动:

public class AppPreferencesActivity extends ABBActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_app_preferences);
    // Display the fragment as the main content.
    getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new AppPreferencesActivityFragment())
            .commit();
}
@Override
public void onBackPressed() {
    super.onBackPressed();
}

}

这是preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
    android:key="firstname"
    android:title="@string/firstname_"
    android:defaultValue=""></EditTextPreference>
<EditTextPreference
    android:key="email"
    android:title="@string/lastname_"
    android:defaultValue=""></EditTextPreference>
<EditTextPreference
    android:key="email"
    android:title="@string/email_adresse_"
    android:defaultValue=""></EditTextPreference>

logcat:

10-31 16:32:50374 24512-24512/?E/AndroidRuntime﹕致命异常:mainjava.lang.NullPointerException在android.preference.PreferenceFragment$3.onKey(PreferenceFragment.java:368)在android.view.view.dispatchKeyEvent(view.java:7200)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1354)在android.widget.ListView.dispatchKeyEvent(ListView.java:2088)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)网址:com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1920)网址:com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1395)在android.app.Activity.dispatchKeyEvent(Activity.java:2370)在android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrappr.java:50)位于android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDeleateImplBase.java:250)网址:com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1847)在android.view.ViewRootImpl.deliveryKeyEventPostIme(ViewRootImpl.java:3701)在android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651)在android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818)在android.os.Handler.dispatchMessage(Handler.java:99)在android.os.Looper.loop(Looper.java:137)在android.app.ActivityThread.main(ActivityThreads.java:5041)位于java.lang.reflect.Method.invokeNative(Native Method)位于java.lang.reflect.Method.ioke(Method.java:511)网址:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:560)在dalvik.system.NativeStart.main(本地方法)

有人能帮忙吗?

将您的碎片事务添加到后台,如下所示:

getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new AppPreferencesActivityFragment())
            .addToBackStack(null)//Add this transaction to the back stack.
            .commit();

更改为:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() != 0) {
        getFragmentManager().popBackStack();
    }
}

问题是Amdroid Studio自动生成的一行代码,我没有注意到:

在活动中,删除:

setContentView(R.layout.activity_app_preferences);

修复它。

最新更新