使用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)
}
我是走在正确的轨道上,还是还有很长的路要走?