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

时间:2014-11-29 20:10:46

标签: android android-recyclerview

我正在使用新的RecyclerView替换现有的ListViews并遇到以下问题:在旧的BaseAdapter中,我可以创建一个“fly-in”{{ 1}}对于适配器内的每个项目,只需将此Animation应用于Animation,并在convertView中注意SparseBooleanArray已经显示的位置。

已替换Animation的{​​{1}}方法无法访问任何onBindViewHolder(),也无法访问新getView()。基本上我需要访问Views的根ItemAnimator,才能将自己的View应用于每个项目。

任何想法怎么做?

1 个答案:

答案 0 :(得分:12)

RecyclerView使用的每个观看者都必须子类RecyclerView.ViewHolder,并且此类有一个名为itemView的公共字段,其中包含与View关联的ViewHolder }。

final View view = viewHolder.itemView;

但总的来说:动画在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;
    }
});

在所有这些回调中,您可以通过公共字段访问View实例,如上所述。与RecyclerView.Adapter不同的Adapters实际上只对RecyclerView中的数据负责。

您还可以查看已经实现了一些不同ItemAnimators。{/ p>的this library on GitHub

请参阅文档以获取更多信息!