2013-06-24 171 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