未使用 SelectionTracker 触发 Android RecyclerView 卡片菜单按钮 onClick
Posted
技术标签:
【中文标题】未使用 SelectionTracker 触发 Android RecyclerView 卡片菜单按钮 onClick【英文标题】:Android RecyclerView card menu button onClick not triggered with SelectionTracker 【发布时间】:2021-09-07 22:36:17 【问题描述】:上下文
我有一个RecyclerView
卡片列表,可以通过单击它们来选择它们。我使用SelectionTracker
和ItemDetailsLookup
来跟踪选择了哪些卡片。一切都很好。
现在我在卡片的右上角添加了一个溢出上下文菜单按钮。但是当我点击菜单按钮时,卡片会被取消/选中。我想要的是按钮的onClickListener
触发菜单弹出。
请帮忙,我错过了什么?
片段
class ProductsFragment : Fragment()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View
val tracker = SelectionTracker.Builder( ... ).build()
adapter.tracker = tracker
tracker.addObserver(
object : SelectionTracker.SelectionObserver<String>()
override fun onSelectionChanged() ...
)
RecyclerView.Adapter
class ProductsAdapter : RecyclerView.Adapter<ProductsAdapter.ViewHolder>()
var tracker: SelectionTracker<String>? = null
override fun onBindViewHolder(holder: ViewHolder, position: Int)
val product= products[position]
holder.menuButton.setOnClickListener
showMenu(holder)
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
val menuButton: MaterialButton = view.findViewById(R.id.menu)
fun getItemDetails(): ItemDetails<String> = object : ItemDetails<String>()
override fun getPosition(): Int = absolutePosition
override fun getSelectionKey(): String = getItem(absolutePosition).product.id.toString()
【问题讨论】:
试试这个:***.com/a/34896536/2827025 【参考方案1】:在 ViewHolder 内部类中添加以下内容:
init
menuButton.setOnTouchListener v, _ ->
v.parent.requestDisallowInterceptTouchEvent(true)
false
android Studio 会发出警告:onTouch lambda should call View#performClick when a click is detected
。您可以通过在 ViewHolder 类定义之前添加以下注释来抑制这种情况:
@SuppressLint("ClickableViewAccessibility")
【讨论】:
以上是关于未使用 SelectionTracker 触发 Android RecyclerView 卡片菜单按钮 onClick的主要内容,如果未能解决你的问题,请参考以下文章