Dialog在屏幕旋转android上关闭

时间:2013-06-24 07:26:52

标签: android

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

3 个答案:

答案 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