Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 共享引用保存_Android_Sharedpreferences_Drawable_Android Drawable_Imagebutton - Fatal编程技术网

Android 共享引用保存

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

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

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
名称。