2013-06-24 173 views
1

我创建了一个具有ListPreference(prefViewPos)和Preference(prefAlert)的PreferenceActivity。当用户点击'prefAlert'时,确定取消对话框打开。现在当屏幕旋转时,我的警报对话框会关闭,但如果'prefViewPos'对话框打开,那么它不会关闭。那么为什么我的警报对话框被关闭,而ListPreference对话框没有在屏幕旋转关闭?Dialog在屏幕旋转时关闭android

代码:

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

你能分享你的活动代码吗? – iceman

回答

2

这是因为你的活动是在方向改变重建。请参阅:Activity Life-cycle Management [developer.android.com]。

UPDATE:

的名单偏好的对话框是偏好层次结构的一部分,由机器人创建。因此它在PreferenceActivity的onSaveInstanceState()和onRestoreInstanceState()调用中由android保存和恢复。而您正在为您的首选项“prefAlert”创建对话框,并且必须在您的类'onSaveInstanceState和onRestoreInstanceState方法中保存和恢复。看到这一点:Recreating an activity [developer.android.com]

+0

我知道它,但为什么ListPreference没有关闭? – user1041858

+0

可能是喜好活动保存并重新创建它。我会研究这个源代码。你在为哪个平台建造(清单中的目标sdk)? – iceman

+0

android:targetSdkVersion =“15” – user1041858

1

没有ü在活动

android:configChanges="orientation" /> 
+0

这是标准的方式吗? – user1041858

+3

不,不鼓励。 – iceman

0

把它定义在清单如果你使用PreferenceFragment你可能创建与方向变化的新片段,而不是重用旧的。看看this answer