下面是我的 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).
上一篇:是否有可能定义的Parallel.For执行顺序?有可能、顺序、定义、Parallel
下一篇:从数据源asp.net gridview的DataNavigateUrlFormatString数据源、asp、net、gridview