2017-05-29 1 views
0

J'ai adaptateur personnalisé et un ArrayList<String> appelé groceries contenant tout ce que l'utilisateur met là.Enregistrer la couleur et barrer le texte avec sharedPreferences

C'est ma méthode sauver la listView chaque fois que l'utilisateur met quelque chose ou supprime:

public void saveGroceriesList() { 
    sharedPreferences = getContext().getSharedPreferences("com.me.application", Context.MODE_PRIVATE); 
    HashSet<String> set = new HashSet(groceries); 
    sharedPreferences.edit().putStringSet("Groceries", set).apply(); 
} 

Et là, je mets barrés et la couleur du changement onClick pour listView:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      list_content = (TextView) view.findViewById(R.id.list_content); 

      if (!isChecked){ 

       isChecked = true; 
       list_content.setPaintFlags(list_content.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
       list_content.setTextColor(Color.parseColor("#a7a7a7")); 
       saveGroceriesList(); 

      } else { 

       isChecked = false; 
       list_content.setPaintFlags(list_content.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG)); 
       list_content.setTextColor(Color.parseColor("#000000")); 
       saveGroceriesList(); 

      } 

     } 
    }); 

list_content est mon TextView pour listView. Le problème est que la méthode saveGroceriesList(); ne sauvegarde pas la couleur. Comment enregistrer la couleur et le texte barré avec sharedPreferences?

Répondre

2

Je ne vois pas où vous ajoutez des valeurs de couleur dans l'ensemble, je pense qu'il est à ce problème

+0

Comment les ajouter à définir si j'ai séparé TextView? – Zeo

+0

voulez-vous obtenir allData de listview et les enregistrer? –

1

La meilleure solution, de loin à mon humble avis, est d'utiliser un meilleur modèle de stockage de données. Par exemple, vous pouvez utiliser une base de données SQLite, avec des colonnes pour les différentes propriétés (nom, vérifié). Ou, vous pouvez stocker vos données dans un fichier JSON, ou un fichier XML, ou un fichier CSV, ou une autre forme de fichier simple.

Si, pour une raison quelconque, vous êtes sûr que vous voulez utiliser SharedPreferences, vous pouvez:

  • Créer une classe GroceryItem qui connaît le nom et vérifié les informations d'état
  • Tenir une ArrayList<GroceryItem> qui est votre représentation en mémoire de votre modèle de données
  • Utilisez Gson, Jackson, ou un autre analyseur JSON pour convertir le ArrayList<GroceryItem> et à partir d'une représentation String
  • Enregistrer le String dans SharedPreferences
+0

Je n'ai pas travaillé avec les bases de données SQLite, mais je vais prendre votre réponse en compte et essayer thath. Merci! – Zeo