【问题标题】:Why context menu doesn't opens in fragment?为什么上下文菜单不会在片段中打开?
【发布时间】:2021-02-20 01:03:36
【问题描述】:

我正在尝试在片段中创建上下文菜单。我的行动顺序:

1)创建资源目录和菜单文件(context_menu.xml)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/download"
    android:title="Download"/>

<item android:id="@+id/hello"
    android:title="Hello"/>

<item android:id="@+id/bye"
    android:title="Bye"/>

2)oncreateView() 中的设置按钮

val button = view.findViewById<Button>(R.id.download_button)
    registerForContextMenu(button)
    button.setOnClickListener {
        Toast.makeText(requireContext(), "Click", Toast.LENGTH_SHORT).show()
    }

按钮有效。 Toast 出现。

3)在我的片段中重写 onCkeateContextMenu() 方法

override fun onCreateContextMenu(
    menu: ContextMenu,
    v: View,
    menuInfo: ContextMenu.ContextMenuInfo?
) {
    super.onCreateContextMenu(menu, v, menuInfo)
    requireActivity().menuInflater.inflate(R.menu.context_menu, menu)
}

按下按钮不会打开菜单。可能是什么问题?

【问题讨论】:

标签: android


【解决方案1】:

registerForContextMenu()注册上下文菜单后,需要用activity.startSupportActionMode(someCallback)启动动作模式

【讨论】:

  • 我在片段 onCreateView() 方法中注册了上下文菜单,但我无法调用 startSupportActionMode(someCallback) 因为来自 requireActivity() 方法的活动不包含此类方法。
  • @Novikov 您需要将 requireActivity() 转换为托管此片段的活动 .. 像 (requireActivity() as MainActivity).startSupportActionMode(callback) .. 将 MainActivity 更改为您的活动名称
  • 我照你说的做了,但没有用!
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多