无法执行的onSaveInstanceState后(的onClick preference)这个动作 [英] Can not perform this action after onSaveInstanceState (onClick preference)
问题描述
下面是我的 preferenceActivity
(内部类我主要活动的)
Here is my PreferenceActivity
(Inner class of my Main Activity)
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);
}
下面是我的上preferenceClick
:
@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);
}
}
问题:
当我点击preference(定义在XML中),当我处理的onClick
(我展示 TimePickerDialog
的onClick
)我有以下异常:
When I click on preference (defined in XML ), and when I handle onClick
(I'm showing TimePickerDialog
onClick
) I got following exception:
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)
code错误指向方法显示()
在上preferenceClick
方法。
为什么会出现这种情况,我该如何解决这个问题?
Why does this happen and how can I fix this?
编辑:
prefs.xml文件
Prefs.xml file
<?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>
我已经试过:
我试过解决方案href=\"http://stackoverflow.com/questions/7469082/getting-exception-illegalstateexception-can-not-perform-this-action-after-onsa/10261438#10261438\">getting例外&QUOT; IllegalStateException异常:不能及的onSaveInstanceState后QUOT执行此操作;
I've tried solution with most votes, which i found here getting exception "IllegalStateException: Can not perform this action after onSaveInstanceState"
@Override
protected void onSaveInstanceState(Bundle outState) {
//No call for super(). Bug on API Level > 11.
}
但它仍然没有工作。甚至没有API&LT; 11.我仍然得到已经提到的异常。
But it's still not working. Not even on API < 11. I'm still getting already mentioned exception.
推荐答案
这是一个有点肢体这里走出去:
Going out on a bit of a limb here:
// 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
与TestSettings活动关联。我有你正在使用从MainActivity的 FragmentManager
实例的感觉(如TestSettings看到的是一个内部类MainActivity的,这是不是疯了猜测的......也许)
Ensures that you are using the FragmentManager
associated with the TestSettings Activity. I have a feeling that you are using the FragmentManager
instance from MainActivity (seeing as TestSettings is an inner class of MainActivity this isn't that crazy of a guess... maybe).
这篇关于无法执行的onSaveInstanceState后(的onClick preference)这个动作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!