所以我有一个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中调用我的方法?还有其他更好的方法吗?
我猜你之所以会为null的原因是,在Adapter
viewHolder
中应该只有一个回调,并且所有动画都应该由视图管理。如果适配器管理一些真正的基本业务逻辑,则更好,更干净,将视图应该发生的事情留给视图本身。
假设您的动画中有一个xml文件您可以从视图控件中通知适配器并启动动画
fun IamACoolCallBack(){
AnimationUtils.loadLayoutAnimation(context, R.anim.layout_animation_fall_down);
with(recyclerView){
setLayoutAnimation(controller);
getAdapter().notifyDataSetChanged();
scheduleLayoutAnimation();
}
}
编辑我发现this教程对我来说看起来很整洁