首页 > 解决方案 > 如何实现改变 viewHolder 内容的滑动效果

问题描述

嗨,我正在使用 android studio,我目前正在使用 recyclerview 问题是我想在滑动时在行后面显示一个隐藏的 ImageView,但因为我不知道如何。

我提出了使用两个线性布局的想法,因此其中一个将存储 recyclerview 与图像,另一个将 recyclerview 与滑动行一起存储。

这可能吗?这会减慢应用程序的速度吗?这是浪费内存吗?

先感谢您

标签: androidkotlinandroid-recyclerviewandroid-linearlayout

解决方案


我的工作假设您在 viewHolders 中有一些自定义视图,并且您使用 onBindViewHolder 为每个位置填充该视图。也就是说,我在假设您对 ViewHolder 构造具有以下内容的假设下工作:

inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
            var myCustomView= view as MyCustomView
        }

override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
            val myCustomView=MyCustomView(viewGroup.context)
            myCustomView.layoutParams= ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT)
            return ViewHolder(myCustomView)
        }

override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
            viewHolder.myCustomView.myTextView.text="this is text"
}

如果我必须解决这个问题,我会将 xml 转到该自定义视图,并使用 FrameLayout 或 LinearLayout 在最外部的级别进行包装。所以现在你的 onBindViewHolder 正在做几乎相同的工作,除了它填充所有的内容,比如 viewHolder.myCustomView.interior.myTextView.text="this is text" 而不是 viewHolder.myCustomView.myTextView.text="this is text ”。

然后我会扩展 ItemTouchHelper.Callback(),它给你一个滑动监听器。在该滑动侦听器内部,我将删除 myCustomView 的内部并将其替换为 imageView。然后我会调用 notifyDataSetChanged() 并希望看到与以前相同的 recyclerview,只是将滑动视图替换为图片。

编辑:

哦,你知道一个更好的主意是忘记外部框架,只用一个不可见的高海拔 imageView 覆盖整个原始 MyCustomView。然后在 ItemTouchHelper.Callback() 内部的 onSwiped() 内部,您可以只提供图像资源并切换可见性。那会干净得多。


推荐阅读