如何实现改变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() 内部,您可以只提供图像资源并切换可见性。那会更干净。
您好,我正在使用 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() 内部,您可以只提供图像资源并切换可见性。那会更干净。