Невозможно выполнить это действие после onSaveInstanceState (предпочтение onClick)

Вот моя PreferenceActivity (Внутренний класс моей основной деятельности)

 public static class TestSettings extends PreferenceActivity implements Preference.OnPreferenceClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref); getPreferenceManager().findPreference("key").setOnPreferenceClickListener(this); } 

Вот мой onPreferenceClick :

 @Override public boolean onPreferenceClick(Preference preference) { FragmentClass fc = new FragmentClass(); fc.show(fm, "TAG"); return false; } 

И вот мой диалог FragmentClass ( TimePicker ):

 public class FragmentClass extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new TimePickerDialog(getActivity(), this, 15, 00, false); } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Log.i("APP", "hour: "+hourOfDay+", min: "+minute); } } 

ПРОБЛЕМА:

Когда я нажимаю на предпочтение (определенное в XML), и когда я обрабатываю onClick (я показываю TimePickerDialog ), я получил следующее исключение:

  03-21 10:06:41.325: E/AndroidRuntime(11003): FATAL EXCEPTION: main 03-21 10:06:41.325: E/AndroidRuntime(11003): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.support.v4.app.DialogFragment.show(DialogFragment.java:127) 03-21 10:06:41.325: E/AndroidRuntime(11003): at com.example.timepicker2.MainActivity$TestSettings.onPreferenceClick(MainActivity.java:110) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.preference.Preference.performClick(Preference.java:951) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:215) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.widget.AbsListView.performItemClick(AbsListView.java:1100) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.widget.AbsListView$1.run(AbsListView.java:3423) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.os.Handler.handleCallback(Handler.java:725) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.os.Handler.dispatchMessage(Handler.java:92) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.os.Looper.loop(Looper.java:137) 03-21 10:06:41.325: E/AndroidRuntime(11003): at android.app.ActivityThread.main(ActivityThread.java:5041) 03-21 10:06:41.325: E/AndroidRuntime(11003): at java.lang.reflect.Method.invokeNative(Native Method) 03-21 10:06:41.325: E/AndroidRuntime(11003): at java.lang.reflect.Method.invoke(Method.java:511) 03-21 10:06:41.325: E/AndroidRuntime(11003): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 03-21 10:06:41.325: E/AndroidRuntime(11003): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 03-21 10:06:41.325: E/AndroidRuntime(11003): at dalvik.system.NativeStart.main(Native Method) 

Ошибка кода указывает на метод show() в методе onPreferenceClick .

Почему это происходит и как я могу это исправить?

РЕДАКТИРОВАТЬ:

Файл Prefs.xml

  <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <CheckBoxPreference android:title="Checkbox" android:summary="Checkbox"/> <EditTextPreference android:summary="time" android:dialogTitle="Hello" /> <Preference android:title="Prefff" android:key="key"/> </PreferenceScreen> 

Что я пробовал:

Я пробовал решение с большинством голосов, которое я нашел здесь, получая исключение «IllegalStateException: не удается выполнить это действие после onSaveInstanceState»

  @Override protected void onSaveInstanceState(Bundle outState) { //No call for super(). Bug on API Level > 11. } 

Но он все еще не работает. Даже на API <11. Я все еще получаю уже упоминавшееся исключение.

Solutions Collecting From Web of "Невозможно выполнить это действие после onSaveInstanceState (предпочтение onClick)"

Выйдя на немного конечности здесь:

 // this is in your TestSettings class public boolean onPreferenceClick(Preference preference) { FragmentClass fc = new FragmentClass(); // getFragmentManager() here ensures you are using the FragmentManager // associated with TestSettings activity and not your MainActivity fc.show(getFragmentManager(), "TAG"); return false; } 

Ключ getFragmentManager ()

Убедитесь, что вы используете FragmentManager связанный с ActivitySettings Activity. У меня такое ощущение, что вы используете экземпляр FragmentManager из MainActivity (видя, что TestSettings является внутренним классом MainActivity, это не значит, что это безумие догадки … может быть).