我有一个片段让我们调用它EventFragment
,我有一个名为RecyclerView.Adapter
的{{1}},该适配器内部是一个名为EventAdapter
的视图类。我想从EventViewHolder
访问viewholder类中的动画方法。
我将如何做到这一点?我正在考虑定义另一个接口来实现这一目标。
这是我到目前为止所做的:
OnAnimationListener
Fragment
适配器
public interface OnAnimationListener {
void onAnimation();
}
EventFragment
public EventAdapter extends RecyclerView.Adapter<RecycleView.ViewHolder> {
// Boilerplate initialization stuff here
public class EventViewHolder extends RecyclerView.ViewHolder implements OnAnimationListener {
// Initialization code
@Override
public void onAnimation() {
// Do an animation
}
}
}
我在想我应该在public class EventFragment extends Fragment {
// Boilerplate initialization code
}
内部实现一个接口,如下所示:
Fragment
然后我在这一点上陷入困境。通常,一旦听众通过,你就会调用它:
public class EventFragment extends Fragment implements onAnimationListener {
private void initAdapter() {
mAdapter.setOnAnimationListener(this);
}
@Override
public void onAnimation(Data data) {
// pass any data
}
}
但这没有意义。代码流如下:
OnAnimationListener.onAnimation(...)
我需要实现以下代码流程:
EventFragment --> Adapter --> ViewHolder
我该如何做到这一点?也许将接口从Viewholder传递给Fragment,然后从片段中调用EventFragment (get access to specific viewholder and do animation) <--> Viewholder
吧?
我想具体控制动画在mOnAnimationListener.onAnimation()
上发生的时间,我希望从EventViewHolder
获得此控制权,我应该如何解决此问题?
答案 0 :(得分:0)
如果您只想为RecyclerView
项设置动画,可以查看RecyclerView.ItemAnimator
。
如果没有(或者如果您仍想在片段中处理此问题),您可以在ViewHolder
对象中附加视图的点击侦听器,并通过向上传递事件ViewHolder->Adapter->Fragment
来处理点击您已拥有的机制(并将onClick
中收到的视图作为参数传递)。就个人而言,我会远离这种模式。一个原因是RecyclerView
可以在此期间滚动,而我现在对于特定视图发生了什么,一旦它处于关闭位置或者甚至可能在屏幕外都没有足够的知识。或者可能指向其他数据。