Фрагмент настроек Android OnBackPressed Crash

я реализовал PreferenceFragment, который я использую для обработки предпочтений пользователя.

Проблема в том, что когда я нажимал кнопку «Назад» на устройстве, приложение вылетало. Я использую тот же метод, что и для загрузки своего фрагмента, но onBackPressed приводит к сбою активности.

FragmentSettings settings = new FragmentSettings(); 
ft.replace(R.id.container, settings);
ft.addToBackStack("settings");
ft.commit();    

Вот журнал сбоев:

12-26 09:53:54.351: E/InputEventSender(565): Exception dispatching finished signal.
12-26 09:53:54.351: E/MessageQueue-JNI(565): Exception in MessageQueue callback: handleReceiveCallback
12-26 09:53:54.421: E/MessageQueue-JNI(565): android.util.SuperNotCalledException: Fragment FragmentSettings{421d3d10 #1 id=0x7f0a0000} did not call through to super.onPause()
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.Fragment.performPause(Fragment.java:1861)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:935)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1167)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:717)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1502)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:495)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.Activity.onBackPressed(Activity.java:2318)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.Activity.onKeyUp(Activity.java:2295)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.KeyEvent.dispatch(KeyEvent.java:3197)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.Activity.dispatchKeyEvent(Activity.java:2529)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2181)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4670)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4637)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4256)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4225)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4336)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4233)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4393)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4256)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4225)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4233)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4256)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4225)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4369)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4529)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2215)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1863)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1854)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2192)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.os.MessageQueue.nativePollOnce(Native Method)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.os.MessageQueue.next(MessageQueue.java:138)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.os.Looper.loop(Looper.java:131)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at android.app.ActivityThread.main(ActivityThread.java:5602)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at java.lang.reflect.Method.invokeNative(Native Method)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at java.lang.reflect.Method.invoke(Method.java:515)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
12-26 09:53:54.421: E/MessageQueue-JNI(565):    at dalvik.system.NativeStart.main(Native Method)

Затем :

12-26 09:56:06.561: D/AndroidRuntime(565): Shutting down VM
12-26 09:56:06.561: W/dalvikvm(565): threadid=1: thread exiting with uncaught exception (group=0x4194dc08)
12-26 09:56:06.651: E/AndroidRuntime(565): FATAL EXCEPTION: main
12-26 09:56:06.651: E/AndroidRuntime(565): Process: com.soclip.views, PID: 565
12-26 09:56:06.651: E/AndroidRuntime(565): android.util.SuperNotCalledException: Fragment FragmentSettings{421d3d10 #1 id=0x7f0a0000} did not call through to super.onPause()
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.Fragment.performPause(Fragment.java:1861)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:935)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1167)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:717)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1502)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:495)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.Activity.onBackPressed(Activity.java:2318)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.Activity.onKeyUp(Activity.java:2295)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.KeyEvent.dispatch(KeyEvent.java:3197)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.Activity.dispatchKeyEvent(Activity.java:2529)
12-26 09:56:06.651: E/AndroidRuntime(565):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2181)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4670)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4637)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4256)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4225)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4336)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4233)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4393)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4256)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4225)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4233)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4256)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4225)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4369)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4529)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2215)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1863)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1854)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2192)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.os.MessageQueue.nativePollOnce(Native Method)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.os.MessageQueue.next(MessageQueue.java:138)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.os.Looper.loop(Looper.java:131)
12-26 09:56:06.651: E/AndroidRuntime(565):  at android.app.ActivityThread.main(ActivityThread.java:5602)
12-26 09:56:06.651: E/AndroidRuntime(565):  at java.lang.reflect.Method.invokeNative(Native Method)
12-26 09:56:06.651: E/AndroidRuntime(565):  at java.lang.reflect.Method.invoke(Method.java:515)
12-26 09:56:06.651: E/AndroidRuntime(565):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
12-26 09:56:06.651: E/AndroidRuntime(565):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
12-26 09:56:06.651: E/AndroidRuntime(565):  at dalvik.system.NativeStart.main(Native Method)

Любая помощь ? Спасибо.


person user2335528    schedule 26.12.2014    source источник
comment
Этот код — это код, который вы используете для отображения настроек, верно? Что вы делаете на BackPressed? Что вы хотите, чтобы приложение делало onBackPressed? Если вы добавили предыдущий фрагмент в задний стек, вам не нужно ничего кодировать в onBackPressed. Вызовите только super или не реализуйте его вообще.   -  person hmartinezd    schedule 26.12.2014
comment
добавление в @hmartinezd Где журнал сбоев?   -  person Ahmed Hegazy    schedule 26.12.2014
comment
Я ничего не делаю с onBackPRessed, потому что не знаю, как это реализовать во фрагменте, я использую этот термин, чтобы сказать, что я нажал кнопку «Назад». Я просто хочу вернуться в свой стек, как это делает приложение для всех загружаемых фрагментов, которые не являются предпочтительными фрагментами...   -  person user2335528    schedule 26.12.2014
comment
Хорошо, происходит сбой, потому что вы переопределяете метод onBackPressed, а не вызываете super. Первое, что вам нужно сделать в вашем методе onBackPressed, это вызвать этот super.onBackPressed() или, возможно, вы просто можете удалить метод all, если он вам не нужен.   -  person hmartinezd    schedule 26.12.2014
comment
Я никогда не переопределяю onBackPressed, ни в своем, ни в своем фрагменте. Благодарность   -  person user2335528    schedule 26.12.2014


Ответы (1)


Эта часть журнала ошибок

did not call through to super.onPause()

указывает, что один из ваших фрагментов имеет метод onPause, но забыл вызвать super.onPause(); Убедитесь, что onPause вашего фрагмента действительно вызывает super.onPause();. Что-то вроде этого.

@Override
public void onPause() {
    // code run before super
    super.onPause(); // <-- the super
    // code run after super
}
person petey    schedule 26.12.2014