为什么上下文菜单不适用于 android kotlin?

Why context menu not work for android kotlin?

我有一个简单的 android 应用程序,在我的应用程序中,有一个图像图标,当我单击该图标时,我想显示上下文菜单。我的代码正在调试,但是当我单击图像按钮时,没有任何变化,因此上下文菜单不起作用,我不知道问题出在哪里,任何想法将不胜感激。

菜单片段:

class MenuFragment : Fragment() {

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_menu, container, false)

    popupMenu()
    }

  private  fun popupMenu() {
   val popupMenu = PopupMenu(requireContext(), menu)
   popupMenu.inflate(R.menu.menu)
   popupMenu.setOnMenuItemClickListener {
       when(it.itemId) {
           R.id.menu_one -> {
               Toast.makeText(requireContext(), "menu1", Toast.LENGTH_SHORT).show()
               true
           }
           R.id.menu_two -> {
               Toast.makeText(requireContext(), "menu2", Toast.LENGTH_SHORT).show()
               true
           }
           else -> true
       }
   }
   menu.setOnLongClickListener {
       try {
           val popup = PopupMenu::class.java.getDeclaredField("mPopup")
           popup.isAccessible = true
           val menu = popup.get(popupMenu)
           menu.javaClass
               .getDeclaredMethod("setForceShowIcon",Boolean::class.java)
               .invoke(menu, true)
       }catch(e: Exception) {
           e.printStackTrace()
       }finally {
           popupMenu.show()
       }
       true
   }
   }

  }

fragment_menu:

         <ImageView
            android:id="@+id/menu"
            android:layout_width="wrap_content"
            android:layout_height="16dp"
            android:src="@drawable/ic_menu"
            android:text="5:33 PM"
            android:textSize="12sp"
          />

菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/menu_one"
    android:title="Menu1"
    android:icon="@drawable/ic_menu_one"
    />
<item
    android:id="@+id/menu_two"
    android:title="Menu2"
    android:icon="@drawable/ic_menu_two"
    />

您似乎想尽快显示菜单,因为函数调用是在 return 语句之后,所以它永远不会发生。

您必须利用片段生命周期。覆盖 onViewCreated 并在那里调用它

override... onViewCreated(...) {
     super....
      popUpMenu()
}

方法 onViewCreated 在创建视图后立即发生。如果您在视图准备好交互时需要它 onStart。在这两种情况下,确保向后导航不会再次错误地显示它。