未使用 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 卡片列表,可以通过单击它们来选择它们。我使用SelectionTrackerItemDetailsLookup 来跟踪选择了哪些卡片。一切都很好。

现在我在卡片的右上角添加了一个溢出上下文菜单按钮。但是当我点击菜单按钮时,卡片会被取消/选中。我想要的是按钮的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的主要内容,如果未能解决你的问题,请参考以下文章

onCompleted 处理程序未使用 Apollo 客户端查询触发

自定义 Symfony2 过滤器未使用自定义树枝标签触发

触发更改事件后,Kendo Observable 未更新

input输入中文未完成时触发change事件

U3D自定义Inspector项未触发保存事件的解决方案

带有内部 <span> 的 <a> 未触发:IE 8 中的活动状态