Question

I want to retrieve the names of classes as V, VI, VII from the preferences, however, I am getting them in the format 5,6,7 when I try to fetch it.

Values are stored as follows

<string name="pref_standard">Standard</string>
<string-array name="pref_standard_list_titles">
    <item>V</item>
    <item>VI</item>
    <item>VII</item>
    <item>VIII</item>
    <item>IX</item>
    <item>X</item>
    <item>XI</item>
    <item>XII</item>
</string-array>
<string-array name="pref_standard_list_values">
    <item>5</item>
    <item>6</item>
    <item>7</item>
    <item>8</item>
    <item>9</item>
    <item>10</item>
    <item>11</item>
    <item>12</item>
</string-array>

The preference is declared as

<ListPreference
  android:key="standards_list"
  android:title="@string/pref_standard"
  android:defaultValue="10"
  android:entries="@array/pref_standard_list_titles"
  android:entryValues="@array/pref_standard_list_values"
  android:negativeButtonText="@null"
  android:positiveButtonText="@null"/>

I call the value using this

SharedPreferences sharedPref=PreferenceManager.getDefaultSharedPreferences(getActivity());
String standard_name=sharedPref.getString("standards_list","");

This gives only the numeric values which are in "pref_standard_list_values".

How to get the textual values which are in "pref_standard_list_titles"?

Was it helpful?

Solution

Just remove the line

android:entryValues="@array/pref_standard_list_values"

If you want to translate values in code, use

String[] texts = getResources().getStringArray(R.array.pref_standard_list_titles);
String[] values = getResources().getStringArray(R.array.pref_standard_list_values);

And lookup the index of standard_name in values, and its text at that index in texts

OTHER TIPS

To get entries try this:

String key = "standards_list";
Preference pref = findPreference(key);
if (pref instanceof ListPreference) {
    ListPreference listPref = (ListPreference) pref;
    CharSequence standard_name = listPref.getEntry(); // get currently saved into SharedPreferences single entry value
    CharSequence[] standard_values = listPref.getEntries(); // get all entry values
}

For more use cases read this.

To get name of current selected entry value, use this:

  public StringBuilder getSelectedStandardListItem() {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append('\n');
    String current_standard_list_item = prefs.getString("pref_standard_list_values", "");
    String[] standard_list = getResources().getStringArray(R.array.pref_standard_list_titles);
    String[] standard_list_value = getResources().getStringArray(R.array.pref_standard_list_values);

    for (int i = 0; i < 7; i++) {
        if (current_standard_list_item.equals(standard_list_value[i])) {
            switch (i) {
                case 0:
                    stringBuilder.append(standard_list[0]);
                    break;
                case 1:
                    stringBuilder.append(standard_list[1]);
                    break;
                case 2:
                    stringBuilder.append(standard_list[2]);
                    break;
                case 3:
                    stringBuilder.append(standard_list[3]);
                    break;
                case 4:
                    stringBuilder.append(standard_list[4]);
                    break;
                case 5:
                    stringBuilder.append(standard_list[5]);
                    break;                       
                case 6:
                    stringBuilder.append(standard_list[6]);
                    break;
                case 7:
                    stringBuilder.append(standard_list[7]);
                    break;              
            }
        }

    }
    return stringBuilder;
}

or, to get Entry name by value:

    public StringBuilder getEntryNameByValue(String value) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append('\n');
String[] standard_list = getResources().getStringArray(R.array.pref_standard_list_titles);
String[] standard_list_value = getResources().getStringArray(R.array.pref_standard_list_values);

for (int i = 0; i < 7; i++) {
    if (value.equals(standard_list_value[i])) {
        switch (i) {
            case 0:
                stringBuilder.append(standard_list[0]);
                break;
            case 1:
                stringBuilder.append(standard_list[1]);
                break;
            case 2:
                stringBuilder.append(standard_list[2]);
                break;
            case 3:
                stringBuilder.append(standard_list[3]);
                break;
            case 4:
                stringBuilder.append(standard_list[4]);
                break;
            case 5:
                stringBuilder.append(standard_list[5]);
                break;                       
            case 6:
                stringBuilder.append(standard_list[6]);
                break;
            case 7:
                stringBuilder.append(standard_list[7]);
                break;              
        }
    }
}
return stringBuilder;

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top