L'Adaptateur RecyclerView notifiedatase changed ne fonctionne pas
j'ai étendu
RecyclerView.Adapter<RecyclerView.ViewHolder>
et quand j'ai appelé:
mRecyclerView.getAdapter().notifyDataSetChanged();
il ne s'est rien passé.
La seule manière d'actualiser l'affichage est de nouveau l'adaptateur ( voir cette réponse ):
mRecyclerView.setAdapter(new MyAdapter(...));
j'ai deux problèmes avec cette solution:
- je peux voir un clignotement sur l'écran quand je mets à nouveau l'adaptateur
- le listview retourne à la première position.
des idées?
7 réponses
  si  notifyDataSetChanged() ne déclenche pas les mises à jour de la vue, il y a une chance que vous ayez oublié d'appeler SetLayoutManager()  sur votre RecyclerView (comme je l'ai fait!).
N'oubliez pas de faire ceci:  
var manager = new LinearLayoutManager(Context, LinearLayoutManager.Vertical, false);
_list.SetLayoutManager(manager);
  avant d'appeler  SetAdapter() ;  
désolé pour le code C, j'utilise de la Xamarine.
  si votre getItemCount() renvoie 0, alors notifyDataSetChanged()  ne fera rien.  Assurez-vous que lorsque vous initialisez votre adaptateur, vous passez un ensemble de données valide.  
  selon les javadocs: si vous écrivez un adaptateur, il sera toujours plus efficace d'utiliser les événements de changement plus spécifiques si vous le pouvez. Utilisez  notifyDataSetChanged()  en dernier recours.  
public class NewsAdapter extends RecyclerView.Adapter<...> {    
private static List mFeedsList;
...
    public void swap(List list){
    if (mFeedsList != null) {
        mFeedsList.clear();
        mFeedsList.addAll(list);
    }
    else {
        mFeedsList = list;
    }
    notifyDataSetChanged();
}
je suis à l'aide de Rénovation pour aller chercher de la liste, sur la Rénovation du onResponse (),
adapter.swap(feedList);
voulez-vous partager quelque chose, je faisais face à la même question. Mais ce que je faisais de mal était. Je créais instance de L'Adaptateur chaque fois nouveau et que je faisais notifysetDatachange() à cette nouvelle instance pas l'ancienne.
alors s'il vous plaît assurez-vous que L'Adaptateur que vous avisez soit plus ancien. L'exemple de l'espoir ci-dessous AIDE..
     MyAdapter mAdapter = new MyAdapter(...)
    mRecyclerView.setAdapter(mAdapter );
// TODO 
mAdapter.modifyData(....);
mAdapter.notifySetDataChange();
    MyAdapter extends baseAdapter {
     MyAdapter () {
    }
    modifyData(String[] listData) {
    }
    }
pour mettre à jour recyclerview nous pouvons faire ce qui suit:
1. Create and set adapter again:
    adapter=new MyAdapter(...);
    mRecyclerView.setAdapter(adapter);
2. Clear model list data and then notify:
    ArrayList<YourModel> tempModel=new ArrayList<>(modelList); 
    modelList.clear();   
    modelList.addAll(tempModel); 
    adapter.notifyDataSetChanged();
donc j'ai corrigé mon problème comme ceci : orderList est la liste que je transmets au recyclerview . Il suffit d'ajouter l'élément à la position dans la liste, ici 0 est le 0e position dans la Liste . Alors appelez adaptateur.notifydatase changed() . Fonctionne comme un charme
1) orderList.add (0, String); 2) orderAdapter.notifydatasetachanged ();
notifydatase changed () sholud doit être appelé dans le fil principal.