RecyclerView - 如何获取每行视图的引用

Dro*_*man 2 android android-recyclerview

我正在使用新RecyclerView的替换现有的ListViews并遇到以下问题:在旧的BaseAdapter,我可以Animation为适配器内的每个项目创建一个"fly-in" ,只需将其Animation应用于convertView并注意到在SparseBooleanArray哪个位置Animation已经显示出来了.

onBindViewHolder()已替换的方法getView()不提供对任何方法的访问Views,也不提供对新方法的访问ItemAnimator.基本上我需要访问View我的根,ViewHolder将我自己Animation应用于每个项目.

有什么想法怎么做?

Xav*_*ler 12

必须使用的每个视图持有者RecyclerView都是子类,RecyclerView.ViewHolder并且这个类有一个公共字段itemView,其中包含View与之关联的ViewHolder.

final View view = viewHolder.itemView;
Run Code Online (Sandbox Code Playgroud)

但总的来说:动画的工作方式不同RecyclerView.基本上你在一个单独的类中实现它们ItemAnimator:

mRecyclerView.setItemAnimator(new RecyclerView.ItemAnimator() {

    @Override
    public void runPendingAnimations() {

    }

    @Override
    public boolean animateRemove(RecyclerView.ViewHolder viewHolder) {
        return false;
    }

    @Override
    public boolean animateAdd(RecyclerView.ViewHolder viewHolder) {
        return false;
    }

    @Override
    public boolean animateMove(RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) {
        return false;
    }

    @Override
    public boolean animateChange(RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2, int i, int i2, int i3, int i4) {
        return false;
    }

    @Override
    public void endAnimation(RecyclerView.ViewHolder viewHolder) {

    }

    @Override
    public void endAnimations() {

    }

    @Override
    public boolean isRunning() {
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

在所有这些回调中,您可以View通过公共字段访问实例,如上所述.该RecyclerView.Adapter不像以前Adapters真的只是在数据负责RecyclerView.

您还可以在GitHub上查看已经实现了一些不同的库ItemAnimators.

有关更多信息,请参阅文档!