简体   繁体   中英

Android - Populate Spinner ArrayAdapter from value specified in Settings ListPreference

My code should take the specified value from the listpreference in my settings activity and populate the arrayadapter for my spinner with the specified content. Currently I am trying to accomplish this in onResume. My spinner is spLoadFrom . Below is the code:

onResume of my Fragment which displays a Spinner:

@Override
    public void onResume() {
    super.onResume();
    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());

    Integer values = getPrefs.getInt("prefSections", 1);

    switch (values) {
        case 1:
            ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName);
            spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter);
            SpinnerListener spListener = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener);
            break;
        case 2:
            ArrayAdapter<String> spinnerArrayAdapter2 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName2);
            spinnerArrayAdapter2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter2);
            SpinnerListener spListener2 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener2);
            break;
        case 3:
            ArrayAdapter<String> spinnerArrayAdapter3 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName3);
            spinnerArrayAdapter3.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter3);
            SpinnerListener spListener3 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener3);
            break;
        case 4:
            ArrayAdapter<String> spinnerArrayAdapter4 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName4);
            spinnerArrayAdapter4.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter4);
            SpinnerListener spListener4 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener4);
            break;
        case 5:
            ArrayAdapter<String> spinnerArrayAdapter5 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName5);
            spinnerArrayAdapter5.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter5);
            SpinnerListener spListener5 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener5);
            break;
        default:
            ArrayAdapter<String> spinnerArrayAdapterd = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName);
            spinnerArrayAdapterd.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapterd);
            SpinnerListener spListenerd = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListenerd);
    }
}

My settings.xml:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory android:title="@string/prefUpdateCat">
    <CheckBoxPreference
        android:key="prefUpdate"
        android:summary="On/Off"
        android:title="Check for updates" />
</PreferenceCategory>

<PreferenceCategory android:title="@string/prefSectionsCat">
    <ListPreference
        android:key="pref_Sections"
        android:entries="@array/prefSections"
        android:entryValues="@array/prefSectionsValues"
        android:summary="How the 7110.65 should be displayed"
        android:title="7110.65 displayed" />
</PreferenceCategory>

</PreferenceScreen>

My arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="prefSections">
    <item name="sec">Split by Section</item>
    <item name="secchap">Split by Section with Chapters</item>
    <item name="secchapwhole">Split by Section with Chapters and the entire document</item>
    <item name="chap">Split by Chapters</item>
    <item name="chapwhole">Split by Chapters and the entire document</item>
</string-array>
<string-array name="prefSectionsValues">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
</string-array>

</resources>

Settings Activity:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{

private static final String TAG = "MYAPP";

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    PreferenceManager.setDefaultValues(SettingsActivity.this, R.xml.settings, false);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()){
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Log.d(TAG, "Prefs have changed");

}
}

How could I properly load the value of the sections that the user selects?

I think I found the answer to my question after further browsing of StackOverflow, but will keep it up with the answer here in case someone else has this problem.

I had to change my values to:

Integer values = Integer.parseInt(getPrefs.getString("pref_Sections", ""));

instead of having it as:

Integer values = getPrefs.getInt("prefSections", 1);

I got the idea from looking at the answer posted by ilsy at here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM