Save Spinner with SharedPreferences in fragment (OnItemSelectedListener)

流过昼夜 提交于 2019-12-10 11:56:49

问题


I am new to Android programming and at the moment I am trying to make some spinners with four array elements (string-array), and then save the current state with shared preferences. I've already done a lot of research, but most of the solutions only work for activities, and I am working in a fragment.

The code now is as follows:

FragmentSection3.java

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View v = inflater.inflate(R.layout.preferences, container, false);

final Spinner spinner2 = (Spinner) v.findViewById(R.id.pref2_spinner);
        ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
                getActivity(), R.array.spinner_array, android.R.layout.simple_spinner_item);
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner2.setAdapter(adapter2);

    spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());  //context
            SharedPreferences.Editor prefEditor = prefs.edit();
            prefEditor.putString("savedValue",spinner2.getSelectedItem().toString());
            prefEditor.commit();

            String savedValue=PreferenceManager
                    .getDefaultSharedPreferences(getActivity().getBaseContext()) //context
                    .getString("savedValue","");

            for(int i=0; i<4; i++)
                if(savedValue.equals(spinner2.getItemAtPosition(i).toString())){
                    spinner2.setSelection(i);
                    break;
                }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent){}
    });

    return v;
 }

My Spinner in xml

preferences.xml

<Spinner
            android:layout_weight="50"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/pref2_spinner" />

String Array

strings.xml

    <string-array name="spinner_array">
        <item>Keine</item>
        <item>Eher Keine</item>
        <item>Große</item>
        <item>Eher Große</item>
    </string-array>

I don't know why I can't save my spinner with sharedpreferences, every time I leave the fragment it sets everything back.


回答1:


You are saving the value at the right place but restoring it at the wrong place. What is the purpose of doing

String savedValue=PreferenceManager
.getDefaultSharedPreferences(getActivity().getBaseContext()) //context
.getString("savedValue",""); 

for(int i=0; i<4; i++)
    if(savedValue.equals(spinner2.getItemAtPosition(i).toString())){
        spinner2.setSelection(i);
        break;
}

inside the OnItemSelectedListener() ?

You should restore the value from the sharedPreferences when the view is created and save it when an item is selected. Move the code above outside of the listener and it should be working



来源:https://stackoverflow.com/questions/28551830/save-spinner-with-sharedpreferences-in-fragment-onitemselectedlistener

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!