android - RecyclerView - 如何获得对每一行 View 的引用

标签 android android-recyclerview

我正在使用新的 RecyclerView 替换现有的 ListViews 并遇到以下问题:在旧的 BaseAdapter 中,我可以通过简单地将此 Animation 应用到 convertView 并在 中注意,为适配器内的每个项目创建一个“飞入”Animation SparseBooleanArray 已显示 Animation 的位置。

取代 getView()onBindViewHolder() 方法不提供对任何 Views 的访问,新的 也不提供>ItemAnimator。基本上我需要访问我的 ViewHolder 的根 View 以将我自己的 Animation 应用到每个项目。

有什么想法吗?

最佳答案

RecyclerView 使用的每个 View 持有者都必须继承 RecyclerView.ViewHolder 并且这个类有一个名为 itemView 的公共(public)字段,其中包含 ViewViewHolder 关联。

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;
    }
});

在所有这些回调中,您可以通过我上面解释的公共(public)字段访问 View 实例。 RecyclerView.Adapter 与之前的 Adapter 不同,它实际上只负责 RecyclerView 中的数据。

你也可以看看this library on GitHub它已经实现了一些不同的 ItemAnimators

更多信息请查看文档!

关于android - RecyclerView - 如何获得对每一行 View 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206593/

相关文章:

java - 如何通过字符串搜索sqlite中的列

java - 我想在从图库中选择图像或拍照时减小图像尺寸

java - 如何从 Presenter 解析 JSON 并设置为 RecyclerView(Android)

Android:RecyclerLayout 正在添加默认填充

java - 将 bundle 从 recyclerview 适配器传递到 Activity

android - 装饰 RecyclerView(使用 GridLayoutManager)以显示项目之间的分隔线

android - 基于位置的排行榜

android - 将浏览器作为 Intent 打开,但不要将其保留在 Activity 堆栈中

android - 在 onclick recyclerview 中 toast

java - 使用唯一的字符串设置默认适配器