Recyclerview适配器与Viewholder之间的接口

问题描述 投票:0回答:1

所以我有一个Recyclerview和多个视图持有者。现在,我的一个视口包含一个动画很少的项目。现在,如果用户单击项目活动打开,而我无法控制该活动,那么我唯一了解的方法是通过片段中的回调,即onPause和onResume。一旦片段animation.onResume()被调用,我想调用onResume()

接口类

interface CustomTabClosedListener {
        fun onCustomTabClosed()
    }

适配器相关代码:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
   lateinit var viewViewHolder: RecyclerView.ViewHolder
   val layoutInflater = LayoutInflater.from(context)
   val view = layoutInflater!!.inflate(R.layout.feed_coverage, parent, false)
                viewViewHolder = CoverageViewHolder(view)
                listener = viewViewHolder
}

听众是private var listener: CustomTabClosedListener?=null的地方

ViewHolder

class CoverageViewHolder(val view: View) :CustomTabClosedListener {

override fun onCustomTabClosed() {
    animation?.resume()

现在我的片段在onResume中调用此适配器方法-

fun customTabClosed() {
    listener?.onCustomTabClosed()
 }

但是我的听众在这里得到null,但我不知道为什么。如何通过适配器/片段在Viewholder中调用我的方法?还有其他更好的方法吗?

android android-recyclerview android-viewholder
1个回答
0
投票

我猜你之所以会为null的原因是,在Adapter viewHolder中应该只有一个回调,并且所有动画都应该由视图管理。如果适配器管理一些真正的基本业务逻辑,则更好,更干净,将视图应该发生的事情留给视图本身。

假设您的动画中有一个xml文件您可以从视图控件中通知适配器并启动动画

fun IamACoolCallBack(){

 AnimationUtils.loadLayoutAnimation(context, R.anim.layout_animation_fall_down);
with(recyclerView){
    setLayoutAnimation(controller);
    getAdapter().notifyDataSetChanged();
    scheduleLayoutAnimation();
 }
}

编辑我发现this教程对我来说看起来很整洁

© www.soinside.com 2019 - 2024. All rights reserved.