-2

J'utilise actuellement la clé SharedPreferences, les paires de valeurs pour enregistrer l'état, mais je n'arrive pas à lire le fichier prefs et je coche les cases.Comment définir les cases à cocher dans Recyclerview lorsque l'utilisateur quitte l'application et revient? (Java Android)

J'ai écrit ce code auto-explicatif. Cependant, une exception NullPointerException est lancée sur la ligne list.findViewHolderForAdapterPosition(i).itemView.performClick();. Je veux juste savoir comment mettre les cases à cocher dans la liste de recyclage à vérifier et enregistrer cet état. S'il vous plaît aider.

btnGetSelected.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     StringBuilder stringBuilder = new StringBuilder(); 
     for (Number number : numbers) { 
      if (number.isSelected()) { 
       if (stringBuilder.length() > 0) 
        stringBuilder.append(", "); 
       stringBuilder.append(number.getTextONEs()); 
       Log.e("Checked", "here"); 
       setPreference(getApplicationContext(), "1", number.getONEs()); 
      } else { 
       Log.e("Not checked", "here"); 
       setPreference(getApplicationContext(), "0", number.getONEs()); 
      } 
     } 
    } 
}); 
try { 
    for (int i = 0; i < tocArray.length; i++) { 
     String value = getPreference(getApplicationContext(),Integer.toString(i)); 
     if (value.equalsIgnoreCase("1")) { 
      list.findViewHolderForAdapterPosition(i).itemView.performClick(); 
     } else { 
      //Do Nothing 
     } 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Ceci provient du détenteur de la revue Recyclerview; Pouvez-vous expliquer également tout ce concept de recyclerview et de cartes et pourquoi le «détenteur» est-il nécessaire? Merci. S'il vous plaît aider! Cordialement

+0

Où est le 'nombre'? –

+0

Cela ne devrait pas avoir d'importance. Il renvoie des chaînes en utilisant les méthodes indiquées dans le code. Ma question est de savoir comment sauvegarder l'état de ces boîtes et les vérifier plus tard lorsque l'utilisateur revient à l'activité. – Zac1

+0

Pourquoi la downvote? C'est une très bonne question, et vous ne trouvez pas de solution sur StackOverflow. – Zac1

Répondre

0

Essayez d'ajouter ces méthodes à votre activité:

private void restoreSelectedPositions(){ 
    SharedPreferences preferences = getSharedPreferences("selected_pos", MODE_PRIVATE); 
    int tmpTotal = preferences.getInt("total_pos", 0); 
    if(tmpTotal == numbers.size()){ 
     for(int i=0; i<tmpTotal; i++{ 
      boolean tmpFlag = preferences.getBoolean("pos" + i, false); 
      numbers.get(i).setSelected(tmpFlag); 
     } 
    }else{ 
     // Saved data size not match with existing data. 
    } 
} 

private void saveSelectedPositions(){ 
    SharedPreferences preferences = getSharedPreferences("selected_pos", MODE_PRIVATE); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.clear(); 
    editor.putInt("total_pos", numbers.size()); 
    for(int i=0; i<numbers.size(); i++){ 
     editor.putBoolean("pos" + i, numbers.get(i).isSelected()); 
    } 
    editor.commit(); 
} 

Changement onResume() de l'activité:

@Override 
protected void onResume() { 
    super.onResume(); 
    restoreSelectedPositions(); 
    // Change the line below. 
    Your RecyclerViewAdapter.notifyDataSetChanged(); 
} 

Lorsque vous devez enregistrer, il suffit d'appeler saveSelectedPositions(). J'espère que cette aide!