如何在SharedPreferences中保存ImageButton的资源?

时间:2017-04-25 23:27:34

标签: java android bitmap sharedpreferences android-sharedpreferences

我的应用中有一系列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)

2 个答案:

答案 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());
        }
    }