从片段访问内部类方法(来自适配器中的Viewholder)

时间:2015-08-13 22:12:56

标签: java android android-fragments methods inner-classes

我有一个片段让我们调用它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获得此控制权,我应该如何解决此问题?

1 个答案:

答案 0 :(得分:0)

如果您只想为RecyclerView项设置动画,可以查看RecyclerView.ItemAnimator

如果没有(或者如果您仍想在片段中处理此问题),您可以在ViewHolder对象中附加视图的点击侦听器,并通过向上传递事件ViewHolder->Adapter->Fragment来处理点击您已拥有的机制(并将onClick中收到的视图作为参数传递)。就个人而言,我会远离这种模式。一个原因是RecyclerView可以在此期间滚动,而我现在对于特定视图发生了什么,一旦它处于关闭位置或者甚至可能在屏幕外都没有足够的知识。或者可能指向其他数据。