我有一个微调器,它具有从array-list填充的3个值。
我想将微调框选择的值保存到共享的首选项,以便在使用回到应用程序时可以再次加载。这样做的正确方法是什么(以避免将来出现问题)
1-保存所选内容的位置
2-保存所选内容的文本
3-获取所选内容的位置/文本,获取对应的枚举,并保存枚举名称。
我倾向于第三种选择,以防位置/文本在以后的更新中发生变化,但我想知道执行此任务的正确方法是什么
谢谢
答案 0 :(得分:1)
保存位置(1个变体)和文本(2个变体)是错误的做法。因为您的微调器项目的文本将来可能会更改,因此它们的位置也可以更改。
我认为,您需要创建枚举或@TypeDef
元素并将其保存到sharedPreferences中。 @TypeDef
具有更高的性能,但枚举具有更多的功能(如果您使用Kotlin,则可以使用sealed
类)。对于此解决方案,只需编写可将枚举映射到微调项的映射器。
如果使用枚举,最好的方法是将其保存为ENUM.name()
。
答案 1 :(得分:0)
仔细阅读并理解。获取该帖子并使用,以您自己的理解。
声明您的微调器和sharedPreferences
public Spinner crimeType;
SharedPreferences sharedPreferencesFirstTime;
//////
sharedPreferencesFirstTime = getPreferences
(Context.MODE_PRIVATE);
String firstTime = getResources().getString(R.string.saved_first_time);
firstTimekey = sharedPreferencesFirstTime.getString
(getString(R.string.saved_first_time),
firstTime);
crimeType = v.findViewById(R.id.crimeType);
初始化字符串数组
String[] plants = new String[]{
"Antisocial behaviour",
"Arson",
"Burglary"
};
初始化ArrayAdapter
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(
getActivity(), android.R.layout.simple_spinner_item, plants
);
设置布局资源以创建下拉视图。
/*
Parameters : resource
the layout resource defining the drop down views
*/
spinnerArrayAdapter.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);
设置用于提供支持此数据的适配器
/*
setAdapter(SpinnerAdapter adapter)
Sets the Adapter used to provide the data which backs this Spinner.
*/
crimeType.setAdapter(spinnerArrayAdapter);
crimeType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//Get the text content
crime_string= parent.getItemAtPosition(position).toString();
//Get Position of the crime
selectionPosition=
parent.getItemAtPosition(position);
SharedPreferences.Editor editor = sharedPref.edit();
String key2 = crime_string;
editor.putString(getString(R.string.saved_login_key), key2);
editor.apply();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//Another interface callback
}
});