我有一个偏好活动,其language
为ListPreference
,它显示可用的语言列表。当onCreate被调用时,我可以填充列表,但当用户点击它时我想填充列表。如何在onPreferenceClick被触发时动态填充ListPreference?
this is the java code
:
public class SettingsActivity extends PreferenceActivity implements OnPreferenceClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
addPreferencesFromResource(R.xml.settings);
} catch (Exception e) {
}
}
@Override
public boolean onPreferenceClick(Preference preference) {
if((preference instanceof ListPreference) && (preference.getKey().equals("language"))){
ListPreference lp = (ListPreference)preference;
CharSequence[] entries = { "English", "French" };
CharSequence[] entryValues = {"1" , "2"};
lp.setEntries(entries);
lp.setDefaultValue("1");
lp.setEntryValues(entryValues);
return true;
}
return false;
}
}
,这是settings.xml
(偏好):
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="General Settings">
<CheckBoxPreference android:key="enabled" android:title="Application Status" android:summary="Enable or disable the application" />
<ListPreference
android:key="language"
android:title="Language"
android:dialogTitle="Application language"
android:summary="Select the Application language"
/>
</PreferenceCategory>
</PreferenceScreen>
我搜索,但发现没有任何结果!每次我点击该列表时都会发生异常。
这个答案有效,但是如果你让 setListPreferenceData只运行onClick(而不是onCReate),那么它是一个小错误。这是 ,因为如果setListPreferenceData方法花费的时间超过一分之一秒那么在设置数据之前显示默认列表,并且 用户被强制取消,然后再次打开该首选项。有没有 更新已经显示的列表首选项 setListPreferenceData完成后的方法? – Malabarba
如果你需要自定义行为,你最好的选择可能会扩展'ListPreference'或'Preference'。纯粹的“社交”解决方法是将默认列表项值设置为类似于 –
ccpizza
是的,我必须自己扩展listpreference。但它并没有那么糟糕。 onCreate是唯一需要重载的方法。 – Malabarba