我创建了一个PreferenceActivity,它有一个ListPreference(prefViewPos)和一个Preference(prefAlert)。当用户单击“prefAlert”时,将打开“确定取消”对话框。现在,当屏幕旋转时,我的警报对话框将关闭,但如果'prefViewPos'对话框打开,则它不会关闭。那么为什么我的警报对话框在屏幕旋转时没有关闭ListPreference对话框时关闭呢?
代码:
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setting);
getListView().setBackgroundResource(R.drawable.background);
getListView().setCacheColorHint(Color.TRANSPARENT);
prefViewPos = (ListPreference)findPreference(NetworkMonitorApp.PREF_VIEW_POS);
if(prefViewPos != null)
{
String viewPosEntries[] = {"Top Left","Top Center","Top Right"};
String viewPosEntryValues[] = {String.valueOf(0),String.valueOf(1),String.valueOf(2)};
prefViewPos.setEntries(viewPosEntries);
prefViewPos.setEntryValues(viewPosEntryValues);
if(prefViewPos != null)
{
prefViewPos.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(Preference arg0, Object arg1)
{
//Some code here
return true;
}
});
}
}
prefAlert = (Preference)findPreference("PrefAlert");
if(prefAlert != null)
{
prefTextColor.setOnPreferenceClickListener(new OnPreferenceClickListener()
{
@Override
public boolean onPreferenceClick(Preference preference)
{
//Open dialog by AlertDialog.Builder.show()
return true;
}
});
}
答案 0 :(得分:2)
这是因为您的活动会在方向更改时重新创建。请参阅:Activity Life-cycle Management [developer.android.com]。
<强>更新强>
列表首选项的对话框是首选项层次结构的一部分,由android创建。因此它由Android在PreferenceActivity的onSaveInstanceState()和onRestoreInstanceState()调用中保存和恢复。而您正在为Preference“prefAlert”创建对话框,并且必须在类的onSaveInstanceState和onRestoreInstanceState方法中保存和恢复。请参阅:Recreating an activity [developer.android.com]
答案 1 :(得分:1)
你是否在该活动的清单中定义了它
android:configChanges="orientation" />
答案 2 :(得分:0)
如果您正在使用PreferenceFragment
,则可能会在方向更改上创建新片段,而不是重复使用旧片段。看看this answer。