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

最佳答案

这是因为您的活动是在方向改变时重新创建的。参见:Activity Life-cycle Management [developer.android.com]。

更新:

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

关于android - 对话框在屏幕旋转android上关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17270084/

10-13 07:53
查看更多