Android 共享引用保存
我正在创建一个应用程序,用户可以在其中更改多个ImageButton的源图像,并将其保存在SharedReferences中。以下是我获取和保存图像的方法:Android 共享引用保存,android,sharedpreferences,drawable,android-drawable,imagebutton,Android,Sharedpreferences,Drawable,Android Drawable,Imagebutton,我正在创建一个应用程序,用户可以在其中更改多个ImageButton的源图像,并将其保存在SharedReferences中。以下是我获取和保存图像的方法: public int getImage(String item){ SharedPreferences pref = getActivity().getPreferences(Context.MODE_PRIVATE); int id = pref.getInt(item, R.drawable.no_ite
public int getImage(String item){
SharedPreferences pref = getActivity().getPreferences(Context.MODE_PRIVATE);
int id = pref.getInt(item, R.drawable.no_item);
return id;
}
public void saveImage(String item, int resourceId){
SharedPreferences starterSP = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor edit = starterSP.edit();
edit.putInt(item, resourceId);
edit.apply();
}
这些图像存储为可绘制ID,并存储为整数
但是,当我将一个新图像文件添加到我的drawable文件夹并重新启动应用程序时,我所有现有的ImageButton源都会更改为drawable文件夹中的其他图像。如何防止这种情况发生?您应该保存
drawable
名称而不是id,因为每次应用程序编译时,drawable
id都会更改。
您可以使用-
final int rsId = getResources().getIdentifier(imageNameFromPreferences, "drawable",
context.getPackageName());
保存可提取名称而不是id,因为在项目中添加新的可提取名称并使用该名称检索id时,可提取名称不会更改
public Int getImage(String item) {
SharedPreferences pref = getActivity().getPreferences(Context.MODE_PRIVATE);
String drawable_name = pref.getString(item, null);
int id = getResources().getIdentifier(imageNameFromPreferences, drawable_name,
context.getPackageName());
return id;
}
public void saveImage(String item, String drawable_name) {
SharedPreferences starterSP = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor edit = starterSP.edit();
edit.putString(item, drawable_name);
edit.apply();
}
如果我理解正确,imageNameFromPreferences是我在SharedReferences中存储值的关键,而“drawable”是实际名称(例如“R.drawable.example”)?不。您应该只在
R.drawable.example
中保存example
,即example
是您的drawable
名称。