我实现了一个简单的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);
修复它。