微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 动画RecyclerView不起作用

我试图用动画制作一个简单的例子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);
    }
}
}

Song类包括字段int id,String Name,String Author,getter和setter方法.

解决方法

>不要在onClick()中使用notifyDataSetChanged(),它会 随时取消所有动画. >你的add / removeItem()/包括notifyItemInserted / Removed(),所以请每次添加/删除单个项目,这样动画才能正常播放.如果要同时添加/删除多个项目,请在完成所有数据集的添加/删除后使用notifyItemRangeInserted / Removed(int startPos,int itemsSize).

原文地址:https://www.jb51.cc/android/311747.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐