【问题标题】:SharedPreferences SavingSharedPreferences 保存
【发布时间】:2017-03-26 16:03:39
【问题描述】:

我正在创建一个应用程序,用户可以在其中更改多个 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 文件夹中的其他图像。我怎样才能防止这种情况发生?

【问题讨论】:

    标签: android sharedpreferences drawable android-drawable imagebutton


    【解决方案1】:

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

    你可以通过drawable名称获取drawable资源id -

    final int rsId = getResources().getIdentifier(imageNameFromPreferences, "drawable", 
           context.getPackageName());
    

    【讨论】:

    • 如果我理解正确的话,imageNameFromPreferences 是我用来将值存储在 SharedPreferences 中的键,而“drawable”是实际名称(例如“R.drawable.example”)?
    • 没有。你应该在R.drawable.example 中只保存example,即example 是你的drawable 名称。
    【解决方案2】:

    保存drawable名称而不是id,因为当新的drawable添加到项目中时drawable的名称不会改变并使用名称来检索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();
        }
    

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 1970-01-01
      • 2017-10-15
      • 2013-03-06
      • 2012-05-30
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多