PreferenceActivity启动时打开ListPreference

时间:2014-02-20 12:58:00

标签: android actionbarsherlock preferenceactivity listpreference

我想在没有PreferenceActivity的情况下打开ListPreference。但是当我使用ActionBar Sherlock而没有时间编写自定义ListView作为ListPreferences时,我决定使用来自此线程的临时解决方案: How to open or simulate a click on an android Preference, created with XML, programmatically?

我有PreferenceActivity:

public class PrefsActivity extends SherlockPreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);

        PreferenceScreen preferenceScreen = getPreferenceScreen();
        int pos = findPreference("timeZone").getOrder();
        preferenceScreen.onItemClick(null, null, pos, 0);

    }

}

和prefs.xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="mainPreferences" >
    <ListPreference
        android:defaultValue="Default"
        android:entries="@array/prefs_time_zones_names"
        android:entryValues="@array/prefs_time_zones_values"
        android:key="timeZone"
        android:summary="@string/prefs_time_zones_summary"
        android:title="@string/prefs_time_zones_title" />
    (...)
    (...)
</PreferenceScreen>

当我启动PrefsActivity时,我的ListPreference(带有“timeZone”键)出现并正常工作。列表打开时旋转手机时会出现问题。旋转后,将创建第二个列表。因此,当我从列表中选择一个项目并且列表消失时,第二个仍然存在(选择了原始项目)。 如何避免在轮播时创建第二个列表?

2 个答案:

答案 0 :(得分:1)

不是最好但最简单的解决方案 ADD

android:configChanges="keyboardHidden|orientation"

你的清单中的活动......

<activity android:name="com.your.activity"
      android:configChanges="keyboardHidden|orientation"/>

答案 1 :(得分:0)

我找到了简单的解决方案,只需检查savedInstanceState是否为空。如果是,请致电onItemClick