SharedPreferences Saving

时间:2017-03-26 16:03:40

标签: android sharedpreferences drawable android-drawable imagebutton

我正在创建一个应用程序,用户可以在其中更改多个ImageButtons的源图像,我将这些保存在SharedPreferences中。以下是获取和保存图像的方法:

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

这些图像存储为Drawable ID,存储为整数。

但是,当我将新图像文件添加到我的drawable文件夹并重新启动应用程序时,我所有现有的ImageButton源都会更改为Drawable文件夹中的其他图像。我怎样才能防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

您应该保存drawable名称而不是ID,因为每次应用编译时,drawable ID都会更改。

您可以使用 -

按可绘制名称获取可绘制资源ID
final int rsId = getResources().getIdentifier(imageNameFromPreferences, "drawable", 
       context.getPackageName());

答案 1 :(得分:0)

保存可绘制的名称而不是id,因为当将新的drawable添加到项目并使用名称来检索id时,drawable的名称不会更改。

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