我想在没有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”键)出现并正常工作。列表打开时旋转手机时会出现问题。旋转后,将创建第二个列表。因此,当我从列表中选择一个项目并且列表消失时,第二个仍然存在(选择了原始项目)。 如何避免在轮播时创建第二个列表?
答案 0 :(得分:1)
不是最好但最简单的解决方案 ADD
android:configChanges="keyboardHidden|orientation"
你的清单中的活动......
<activity android:name="com.your.activity"
android:configChanges="keyboardHidden|orientation"/>
答案 1 :(得分:0)
我找到了简单的解决方案,只需检查savedInstanceState
是否为空。如果是,请致电onItemClick
。