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.