【问题标题】:Save Spinner with SharedPreferences in fragment (OnItemSelectedListener)在片段中保存带有 SharedPreferences 的 Spinner (OnItemSelectedListener)
【发布时间】:2015-02-16 23:00:25
【问题描述】:

我是 Android 编程新手,目前我正在尝试使用四个数组元素(字符串数组)制作一些微调器,然后使用共享首选项保存当前状态。我已经做了很多研究,但大多数解决方案仅适用于活动,并且我正在片段中工作。

现在的代码如下:

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;
 }

我在 xml 中的微调器

preferences.xml

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

字符串数组

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>

我不知道为什么我不能用 sharedpreferences 保存我的微调器,每次我离开片段时它都会重新设置所有内容。

【问题讨论】:

    标签: android fragment sharedpreferences spinner onitemselectedlistener


    【解决方案1】:

    您将值保存在正确的位置,但将其恢复到错误的位置。这样做的目的是什么

    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;
    }
    

    在 OnItemSelectedListener() 内部?

    您应该在创建视图时从 sharedPreferences 中恢复值,并在选择项目时保存它。将上面的代码移到侦听器之外,它应该可以工作

    【讨论】:

    • 工作正常,这个答案是最好的保存和获取偏好+1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多