1

ListPreference(prefViewPos) と Preference(prefAlert) を持つ PreferenceActivity を作成します。ユーザーが「prefAlert」をクリックすると、OK キャンセル ダイアログが開きます。画面が回転するとアラート ダイアログが閉じますが、'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 によって作成されます。したがって、PreferenceActivity の onSaveInstanceState() および onRestoreInstanceState() 呼び出しで Android によって保存および復元されます。プリファレンス「prefAlert」のダイアログを作成しているのに対し、クラスの onSaveInstanceState および onRestoreInstanceState メソッドで保存および復元する必要があります。これを参照してください:アクティビティの再作成[developer.android.com]

于 2013-06-24T07:33:48.617 に答える
1

その活動のマニフェストでそれを定義しましたか

 android:configChanges="orientation" />
于 2013-06-24T08:05:46.300 に答える