我尝试使用notifyDataSetChanged()更新我的recyclerview,但它不起作用。我正在将适配器设置为recyclerview,如下所示:
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(ctx, LinearLayoutManager.VERTICAL, false);
lstSong.setLayoutManager(mLayoutManager);
lstSong.setItemAnimator(new DefaultItemAnimator());
lstSong.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(0), true));
arrSong = new ArrayList<Song>();
arrSong = kFunc.getAllSong();
songAdapter = new SongAdapter(ctx, arrSong);
lstSong.setAdapter(songAdapter);
这行代码显示数据。但是,当我添加新数据并使用songAdapter.notifyDataSetChanged();
刷新Recyclerview时,数据将不会显示。我知道我可以使用setAdapter()
来显示它,但我想要正确地做到这一点。
我在进行刷新之前添加数据。这是代码:
kFunc = new Function(ctx);
Song song = new Song();
song.setTitle(title);
song.setArtist(artist);
song.setYear_released(yearReleased);
song.setAlbum(album);
song.setGenre(genre);
song.setDuration(duration);
song.setCode(code);
song.setLyrics(lyrics);
kFunc.addSong(song);
dialog.dismiss();
arrSong = kFunc.getAllSong();
songAdapter.notifyDataSetChanged();
答案 0 :(得分:0)
在适配器中创建一个方法,如
public updateItems(ArrayList<Song> songs){
arrSong=songs;
}
在类中获取新值时,使用adapdter对象调用方法
lstSong.updateItems(arrSong);
notifyDataSetChanged();
答案 1 :(得分:0)
我不知道您将新项目添加到RecyclerView.Adapter
的位置。这是添加和设置项目的示例代码。更多细节Sample RecyclerViewAdapter
@Override
public void addItem(M item) {
items.add(item);
notifyItemInserted(items.size() - 1);
}
@Override
public void addItem(int position, M item) {
items.add(position, item);
notifyItemInserted(position);
}
@Override
public void addAllItems(List<M> items) {
this.items.addAll(items);
notifyDataSetChanged();
}
@Override
public void setItems(List<M> items) {
this.items = items;
notifyDataSetChanged();
}
答案 2 :(得分:0)
在通知适配器之前,您应该尝试更新歌曲列表。 例如
arraySongs = <retrive updated data of the song>;
adapter.notifyDataStateChanged()
如果您在ListView中,那么您不是仅为您提供信息
adapter.lstSong =<updated songs List>;
adapter.notifyDataStteChanged();
试试这个对我有用。 快乐的编码。 :)