我的应用中有一系列ImageButtons。通过该应用程序,用户可以将ImageButton的背景设置为可绘制文件。 这非常合适,当用户选择他们想要的图像并单击刷新按钮时,ImageButton的图像会发生变化。
问题是,当我转到其他活动时,更改的ImageButton将返回到默认图像。
我一直在尝试通过SharedPreferences执行此操作。我试图让这个工作使用所有其他类似的问题在这里没有运气。
对于SharedPreferences,我是一个完全的初学者,我知道存储图像并不是它的构建方式,但这是我能想到解决问题的唯一方法。
任何帮助都会 MASSIVELY 赞赏!先谢谢你们。
我对使用SharedPreferences存储图片的了解 我知道我必须将drawbable转换为位图,然后将其编码为Base64(因为SharedPreferences将接受字符串)。我已经这样做了,我认为编码工作正常。
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
grey11.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] grey11base64 = byteArrayOutputStream.toByteArray();
final String encodedGrey11 = Base64.encodeToString(grey11base64, Base64.DEFAULT);
在我的主要活动(显示图像的位置)中,我目前有OnCreate和onStop方法以及onClick for refresh按钮。
编辑:
在我的onCreate(Bundle savedInstantState)中:
final SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("drawableAgreen", R.drawable.a);
editor.commit();
在我的刷新按钮内:
int drawableId = sharedPref.getInt("drawableId", 0);
ImageButton.setBackgroundResource(drawableId)
答案 0 :(得分:1)
只需将可绘制ID存储在SharedPreferences中并引用它。
// store drawable id in SharedPreferences
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("drawableId", R.drawable.btn_background);
editor.commit();
// Read from sharedPref and set background
int drawableId = sharedPref.getInt("drawableId", 0);
ImageButton imageButton = (ImageButton) findViewById(R.id.imageButton);
imageButton.setBackgroundResource(drawableId);
答案 1 :(得分:0)
你最好不要存储drawable id,每次编译你的app时,id可能都不同。你可以在SharedPreferences中存储drawable名称,并通过ResourcesUtils获取这些资源id。
public class ResourcesUtils {
private static final String RES_ID = "id";
private static final String RES_STRING = "string";
private static final String RES_DRABLE = "drable";
public static int getId(Context context,String resName){
return getResId(context,resName,RES_ID);
}
public static int getStringId(Context context,String resName){
return getResId(context,resName,RES_STRING);
}
public static int getDrableId(Context context,String resName){
return getResId(context,resName,RES_DRABLE);
}
public static int getResId(Context context,String resName,String defType){
return context.getResources().getIdentifier(resName, defType, context.getPackageName());
}
}