2

J'ai une vue recycler contenant une liste d'objets d'une classe. Actuellement, lorsque je ferme mon application, toute la liste dans le recyclerView est perdue et après le redémarrage de l'application, recyclerView ne montre rien (pas de liste).Enregistrement de la liste RecyclerView État

Quoi et comment dois-je utiliser pour conserver la liste même après la fermeture et la destruction de ma liste? Je stocke des objets de cette classe dans arraylist pour remplir mon adaptateur recyclerview.

+0

vous pouvez utiliser la base de données locale pour stocker des données en suivant ce lien http://www.androidauthority.com/how-to-store-data-locally-in-android-app-717190/ –

+0

Quelles données vous affichez sur votre liste ? Pourriez-vous partager votre source? – JavadKhan

+0

comment vous remplissez les données? J'ai besoin de cette source, de toute façon. Si vous remplissez vos données manuellement, en entrant par EditText, alors vous devriez utiliser la base de données sqlite. – JavadKhan

Répondre

0

Enregistrer état:

protected void onSaveInstanceState(Bundle state) { 
    super.onSaveInstanceState(state); 

    // Save list state 
    mListState = mLayoutManager.onSaveInstanceState(); 
    state.putParcelable(LIST_STATE_KEY, mListState); 
} 

Restauration de l'état:

protected void onRestoreInstanceState(Bundle state) { 
    super.onRestoreInstanceState(state); 

    // Retrieve list state and list/item positions 
    if(state != null) 
     mListState = state.getParcelable(LIST_STATE_KEY); 
} 

Ensuite Mise à jour le LayoutManager:

@Override 
protected void onResume() { 
    super.onResume(); 

    if (mListState != null) { 
     mLayoutManager.onRestoreInstanceState(mListState); 
    } 
} 
+0

J'ai essayé mais ça n'a pas marché. RecyclerView reste vide après la fermeture de l'application. –

+0

Partagez l'erreur de connexion et le code source. –

1

Override onSaveInstanceState dans l'activité et enregistrer l'état de votre modèle, non l'état de votre gestionnaire de disposition. Vous avez sûrement le modèle de données quelque part, si la vue montre des données du tout.

Comme tout le minimum, vous devez vous rappeler seulement le nombre d'éléments actuellement dans le modèle. C'est si le modèle est capable de récupérer le contenu des éléments requis de quelque part. Si ce n'est pas, ou prend trop de temps, l'état doit inclure également les éléments affichés. Quelque chose comme

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putSerializable("d.list.data", adapter.getState()); 
} 

Et où l'état doit être restauré:

if (savedInstanceState != null) { 
    adapter.setState(savedInstanceState.getSerializable("d.list.data")); 
} 

Here est le code de la classe qui sauve et applique l'état pour le modèle utilisé avec le RecyclerView.

+0

Le lien est rompu :( – ramaral

+1

Le lien devrait maintenant être corrigé Merci d'avoir signalé ce problème. – h22