我正在使用新的 RecyclerView
替换现有的 ListViews
并遇到以下问题:在旧的 BaseAdapter
中,我可以通过简单地将此 Animation
应用到 convertView
并在 中注意,为适配器内的每个项目创建一个“飞入”
已显示 Animation
SparseBooleanArrayAnimation
的位置。
取代 getView()
的 onBindViewHolder()
方法不提供对任何 Views
的访问,新的 也不提供>ItemAnimator
。基本上我需要访问我的 ViewHolder
的根 View
以将我自己的 Animation
应用到每个项目。
有什么想法吗?
最佳答案
RecyclerView
使用的每个 View 持有者都必须继承 RecyclerView.ViewHolder
并且这个类有一个名为 itemView
的公共(public)字段,其中包含 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;
}
});
在所有这些回调中,您可以通过我上面解释的公共(public)字段访问 View
实例。 RecyclerView.Adapter
与之前的 Adapter
不同,它实际上只负责 RecyclerView
中的数据。
你也可以看看this library on GitHub它已经实现了一些不同的 ItemAnimators
。
更多信息请查看文档!
关于android - RecyclerView - 如何获得对每一行 View 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206593/