我正在尝试在SettingsFragment中创建动态ListPreference项,在其中使用AsyncTask从Web服务器加载一组条目和entryValues。通过Activity的OnCreate方法调用AsyncTask,并通过setListPrefs任务(如下)从AsyncTask的OnPostExecute方法填充SettingsFragment。
当SharedPreferences中已经存在一个保存的条目时(通过应用程序的先前使用),将从SharedPreferences中读取该值,目的是选择此项目。
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
public void setListPrefs(String[] theIDs, String[] theTrials) {
// Get trial ListPreference
ListPreference lp = findPreference("trial_id");
lp.setDialogTitle(R.string.select_trial);
// Set up trial option list from downloaded data
CharSequence[] entries = theTrials;
CharSequence[] entryValues = theIDs;
// Get current value
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(getActivity());
String trialId = sharedPreferences.getString("trial_id", "");
int index = lp.findIndexOfValue(trialId);
// Populate with values and id
lp.setEntries(entries);
lp.setEntryValues(entryValues);
// Select
lp.setValueIndex(index);
}
}
不幸的是,虽然条目及其值成功加载,但当前选择未成功,并且列表显示默认值“未设置”。我试图通过读取索引直接设置ValueIndex-以及其他许多方式-但没有成功。跟踪表明在方法的最后一行中应用了正确的索引值,因此,在此阶段,我感到非常困惑。