1

我创建了一个 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;
        }
    });
}
4

3 回答 3

2

这是因为您的活动是在方向更改时重新创建的。请参阅:活动生命周期管理[developer.android.com]。

更新:

列表首选项对话框是首选项层次结构的一部分,由 android 创建。因此,它由 android 在 PreferenceActivity 的 onSaveInstanceState() 和 onRestoreInstanceState() 调用中保存和恢复。而您正在为您的首选项“prefAlert”创建对话框,并且必须在您的类的 onSaveInstanceState 和 onRestoreInstanceState 方法中保存和恢复。看到这个:重新创建一个活动[developer.android.com]

于 2013-06-24T07:33:48.617 回答
1

你有没有在那个活动的清单中定义它

 android:configChanges="orientation" />
于 2013-06-24T08:05:46.300 回答
0

如果您正在使用PreferenceFragment,您可能会在方向更改时创建一个新片段,而不是重用旧片段。看看这个答案

于 2013-12-04T14:19:24.617 回答