如何实现改变viewHolder内容的滑动效果

How to implement a swipe effect that changes viewHolder content

您好,我正在使用 android studio,我目前正在使用 recyclerview,我想在滑动时在行后面显示一个隐藏的 ImageView,但因为我不知道该怎么做。

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

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

提前致谢

我假设您的 viewHolder 中有一些自定义视图,并且您使用 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() 内部,您可以只提供图像资源并切换可见性。那会更干净。