J'essaye de construire un lecteur de musique. J'ai une classe appelée MusicData qui fournit des données de playlist et une autre classe pour le fragment de playlist puisque j'utilise viewpager. Le fragment de playlist charge les données à l'aide d'une classe expandableListAdapter personnalisée.Les données ont changé mais notifyDataSetChanged ne fonctionne pas
Maintenant, le problème est le suivant. Lorsque l'utilisateur clique sur une chanson, elle devrait être ajoutée à la liste de lecture récemment lue et cela devrait se refléter dans le fragment de la liste de lecture. Les données sous-jacentes changent car lorsque je clique sur la première chanson de la playlist, elle joue la même chose mais la vue, qui contient le titre de la chanson, ne change pas
Par conséquent, le problème est essentiellement que les vues ne ne reflète pas les données sous-jacentes. J'ai essayé de placer la méthode notifyDataSetChanged dans la classe de fragment de liste de lecture, mais cela ne fonctionne pas. Que faire?
Voici le code pour la classe de fragments de playlist
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.playlist, container, false);
expandableListView = (ExpandableListView)v.findViewById(R.id.expandableListViewPlaylist);
Log.e(TAG,"1");
expandableListTitle = new ArrayList<>(MusicData.getExpandableListDetailPlayList().keySet());
expandableListAdapter = new CustomExpandableListAdapter(this.getContext(), expandableListTitle, MusicData.getExpandableListDetailPlayList());
expandableListView.setAdapter(expandableListAdapter);
expandableListAdapter.notifyDataSetChanged();
.......
Et ce code est pour la classe MusicData
public static LinkedHashMap<String, ArrayList<Song>> getExpandableListDetailPlayList(){return expandableListDetailPlayList;}
Et ceci est l'adaptateur
public class CustomExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<String> expandableListTitle;
private LinkedHashMap<String, ArrayList<Song>> expandableListDetail;
private String TAG = "AdapterClass";
public CustomExpandableListAdapter(Context context, ArrayList<String> expandableListTitle,
LinkedHashMap<String, ArrayList<Song>> expandableListDetail) {
this.context = context;
this.expandableListTitle = expandableListTitle;
this.expandableListDetail = expandableListDetail;
}
@Override
public Object getChild(int listPosition, int expandedListPosition) {
return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
.get(expandedListPosition);
}
@Override
public long getChildId(int listPosition, int expandedListPosition) {
return expandedListPosition;
}
......
Les données de la liste de lecture est modifiée dans la classe MainActivity. Alors, comment et où j'appelle la méthode notifyDataSetChanged()?
Veuillez partager la partie du code qui gère le clic de l'utilisateur et ajoute ce morceau à la liste en conséquence –
où dois-je appeler la méthode notifyDataSetChanged()? après que vos données ont changé –