使用动态值在Android ListPreference中设置项目

时间:2019-11-19 20:12:39

标签: androidx listpreference

我正在尝试在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-以及其他许多方式-但没有成功。跟踪表明在方法的最后一行中应用了正确的索引值,因此,在此阶段,我感到非常困惑。

0 个答案:

没有答案