我试图用动画制作一个简单的例子RecyclerView,但默认动画不起作用.这是为什么?这里缺少什么?
主要活动:
- public class MainActivity extends Activity {
- List<Song> songsList;
- RecyclerView recyclerView;
- MyAdapter myAdapter;
- RecyclerView.LayoutManager layoutManager;
- Song song1;
- Song song2;
- Song song3;
- Song song4;
- Song song5;
- Song song6;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- songsList = new ArrayList<>();
- song1 = new Song();
- song1.setName("Label1");
- song1.setAuthor("Author1");
- song1.setId(1);
- song2 = new Song();
- song2.setName("Label2");
- song2.setAuthor("Author2");
- song2.setId(2);
- song3 = new Song();
- song3.setName("Label3");
- song3.setAuthor("Author3");
- song3.setId(3);
- song4 = new Song();
- song4.setName("Label4");
- song4.setAuthor("Author4");
- song4.setId(4);
- song5 = new Song();
- song5.setName("Label5");
- song5.setAuthor("Author5");
- song5.setId(5);
- song6 = new Song();
- song6.setName("Label6");
- song6.setAuthor("Author6");
- song6.setId(6);
- songsList.add(song1);
- songsList.add(song2);
- songsList.add(song3);
- recyclerView = (RecyclerView) findViewById(R.id.listView);
- recyclerView.setHasFixedSize(false);
- layoutManager = new LinearLayoutManager(this);
- recyclerView.setLayoutManager(layoutManager);
- myAdapter = new MyAdapter(songsList);
- recyclerView.setAdapter(myAdapter);
- RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
- recyclerView.setItemAnimator(itemAnimator);
- }
- public void onClick(View view) {
- songsList.add(song4);
- myAdapter.addItem(song4);
- songsList.add(song5);
- myAdapter.addItem(song5);
- songsList.add(song6);
- myAdapter.addItem(song6);
- songsList.remove(song1);
- myAdapter.removeItem(1);
- songsList.remove(song2);
- myAdapter.removeItem(2);
- myAdapter.notifyDataSetChanged();
- }
- }
适配器:
- public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
- private List<Song> songList;
- public MyAdapter(List<Song> songList) {
- this.songList = songList;
- }
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup viewGroup,int i) {
- View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
- return new ViewHolder(v);
- }
- @Override
- public void onBindViewHolder(ViewHolder viewHolder,int i) {
- Song song = songList.get(i);
- viewHolder.song.setText(song.getName());
- viewHolder.author.setText(song.getAuthor());
- }
- @Override
- public int getItemCount() {
- return songList.size();
- }
- public void removeItem(int position) {
- songList.remove(position);
- notifyItemRemoved(position);
- }
- public void addItem(Song song) {
- songList.add(song);
- notifyItemInserted(songList.size());
- }
- class ViewHolder extends RecyclerView.ViewHolder {
- private TextView song;
- private TextView author;
- public ViewHolder(View itemView) {
- super(itemView);
- song = (TextView) itemView.findViewById(R.id.tvSong);
- author = (TextView) itemView.findViewById(R.id.tvAuthor);
- }
- }
- }