我使用isChecked
获取复选框的值并将SharedPreferences
和for each loop
保存到HashMap
,并使用 HashMap<String,Object> amenityMap = new HashMap<>();
for(CheckBox checkBox : checkBoxes){
if(checkBox.isChecked()){
amenityMap.put(checkBox.getText().toString().trim(),true);
}
}
saveHashMapSharedPreferences(parentActivity, amenityMap, Amenity.AMENITY_DETAILS,Amenity.AMENITY_DETAILS);
存储了所有值。
我用于保存复选框文本和isChecked的代码:
public static void saveHashMapSharedPreferences(Activity parentActivity,HashMap<String,Object> amenityMap,String spType, String key) {
SharedPreferences appSharedPrefs = parentActivity.getSharedPreferences(spType, Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(amenityMap); //tasks is an ArrayList instance variable
prefsEditor.putString(key, json);
prefsEditor.apply();
}
SharedPreference的方法:
amenityDetails
下面的图片是保存在SharedPreferences .xml中的复选框值:
因此它的键是localField
,复选框的值都在这里。
如何从此SharedPreference中检索复选框值并将其设置回isChecked的复选框?
答案 0 :(得分:1)
首先进行以下更改:
HashMap<String,Boolean> amenityMap = new HashMap<>();
到
for(CheckBox checkBox : checkBoxes){
amenityMap.put(checkBox.getText().toString().trim(),checkBox.isChecked());
}
为每个循环更改您的内容,如下所示:
SharedPreferences appSharedPrefs = parentActivity.getSharedPreferences(spType, Context.MODE_PRIVATE);
Type type = new TypeToken<Map<String, Boolean>>(){}.getType();
Map<String, Boolean> storedAmenityMap = gson.fromJson(appSharedPrefs.getString(key,""), type);
然后您可以按以下方式检索值:
checkBoxObj.setChecked(storedAmenityMap.get(checkBoxObj.getText()));
然后,每当要设置复选框状态时:
ObjectId
答案 1 :(得分:0)
首先,您的HashMap
应该是HashMap<String, boolean>
。
要恢复,您还可以使用Gson
再次将保存的数据解析到HashMap
,然后使用恢复的HashMap
恢复CheckBox
状态
Type collectionType = new TypeToken<HashMap<String, boolean>>(){}.getType();
HashMap<String, boolean> hashMap = gson.fromJson(appSharedPrefs.getString(key,""), collectionType);