我正在使用新的RecyclerView
替换现有的ListViews
并遇到以下问题:在旧的BaseAdapter
中,我可以创建一个“fly-in”{{ 1}}对于适配器内的每个项目,只需将此Animation
应用于Animation
,并在convertView
中注意SparseBooleanArray
已经显示的位置。
已替换Animation
的{{1}}方法无法访问任何onBindViewHolder()
,也无法访问新getView()
。基本上我需要访问Views
的根ItemAnimator
,才能将自己的View
应用于每个项目。
任何想法怎么做?
答案 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
请参阅文档以获取更多信息!