在片段中使用 SharedPreferences 保存 Spinner (OnItemSelectedListener)
Save Spinner with SharedPreferences in fragment (OnItemSelectedListener)
我是 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 保存我的微调器,每次我离开片段时它都会重置所有内容。
您在正确的地方保存了值,但在错误的地方恢复了它。这样做的目的是什么
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 恢复值,并在选择项目时保存它。将上面的代码移到侦听器之外,它应该可以正常工作
我是 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 保存我的微调器,每次我离开片段时它都会重置所有内容。
您在正确的地方保存了值,但在错误的地方恢复了它。这样做的目的是什么
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 恢复值,并在选择项目时保存它。将上面的代码移到侦听器之外,它应该可以正常工作