代码之家  ›  专栏  ›  技术社区  ›  Chris

Android Groupie-长按上下文菜单

  •  0
  • Chris  · 技术社区  · 2 年前

    使用Groupie和视图绑定,我不知道如何在长按 Item

    我在片段中有几个重写,它具有 GroupieAdapter :

    override fun onCreateContextMenu(
        menu: ContextMenu,
        v: View,
        menuInfo: ContextMenu.ContextMenuInfo?
    ) {
        super.onCreateContextMenu(menu, v, menuInfo)
        menu.setHeaderTitle("Pick option")
        requireActivity().menuInflater.inflate(R.menu.save_game_item_context_menu, menu)
    }
    
    override fun onContextItemSelected(item: MenuItem): Boolean {
        Timber.d("Context menu clicked: ", item.itemId)
    
        return super.onContextItemSelected(item)
    }
    

    OnItemLongClickListener

    private val onLongItemClickListener = OnItemLongClickListener { item, view ->
        if (item is SaveGameItem) {
            registerForContextMenu(view)
            Timber.d("Registered for context menu")
        }
    
        return@OnItemLongClickListener true
    }
    

    然而,我不确定我到底是如何“打开”菜单的?长按时,我可以看到日志,但不会打开任何菜单。

    我看到过一些用户不使用Groupie的例子,但我没能把它们放在一起。

    刚接触安卓系统,所以不确定我在哪里出错了?

    编辑:

    好吧,看起来我太离谱了。诀窍似乎是从 View.OnCreateContextMenuListener 在Groupie 项目 ,并在每个项上注册上下文侦听器。

    有点像:

    class SaveGameItem(
        private val saveGame: SaveGame
    ) :
        BindableItem<ItemSaveGameBinding>(), View.OnCreateContextMenuListener {
        
        //...
    
        override fun initializeViewBinding(view: View): ItemSaveGameBinding {
            view.setOnCreateContextMenuListener(this)
    
            return ItemSaveGameBinding.bind(view)
        }
    
        override fun onCreateContextMenu(
            menu: ContextMenu?,
            v: View?,
            menuInfo: ContextMenu.ContextMenuInfo?
        ) {
            menu?.add(0, v?.id ?: 0, 0, "Delete")
            menu?.add(0, v?.id ?: 0, 0, "Upload")
            menu?.add(0, v?.id ?: 0, 0, "Restore")
        }
    } 
    

    现在的问题又回到了利用这一切的片段中 onContextItemSelected 只获取所选菜单项的字符串标题,而不是ID或任何更有用的内容

    override fun onContextItemSelected(item: MenuItem): Boolean {
        Timber.d("Context menu clicked: ", item.toString())
    
        return super.onContextItemSelected(item)
    }
    

    我是走在正确的轨道上,还是还有很长的路要走?

    0 回复  |  直到 2 年前