【问题标题】:Android RecyclerView card menu button onClick not triggered with SelectionTracker未使用 SelectionTracker 触发 Android RecyclerView 卡片菜单按钮 onClick
【发布时间】: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()
            }
}

【问题讨论】:

标签: android kotlin android-recyclerview onclicklistener android-viewholder


【解决方案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")

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2022-08-18
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多