2

Je crée une application dans laquelle l'utilisateur peut modifier l'image source de plusieurs ImageButtons et les enregistrer dans SharedPreferences. Voici mes méthodes pour obtenir et enregistrer les images:SharedPreferences Enregistrement

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

Ces images sont stockées sous forme ID Drawable de, qui sont stockés sous forme de nombres entiers.

Cependant, quand j'ajouter un nouveau fichier d'image à mon dossier étirables et relancer l'application, toutes mes sources ImageButton existantes sont modifiées à une autre image dans mon dossier Drawable. Comment puis-je empêcher cela?

Répondre

1

Vous devez enregistrer le nom drawable au lieu de l'ID, car l'ID drawable change à chaque compilation de l'application.

Vous pouvez obtenir id drawable ressource par nom drawable en utilisant -

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

Si je comprends bien, imageNameFromPreferences est la clé que j'utilise pour stocker la valeur dans SharedPreferences et « drawable » est le nom réel (tel que « R.drawable.example »)? –

+0

Non, vous devriez enregistrer juste 'example' dans' R.drawable.example', c'est-à-dire 'example' est votre nom' drawable'. – Wizard

0

Enregistrer nom drawable au lieu de id parce que le nom d'un drawable ne change pas lorsque de nouveaux dessinables sont ajoutés au projet et utiliser le nom pour récupérer l'identifiant.

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