Android 工具栏片段onoptionsitemselected不叫kotlin,几种解决方案推荐的是什么?

Android 工具栏片段onoptionsitemselected不叫kotlin,几种解决方案推荐的是什么?,android,android-studio,android-fragments,android-toolbar,Android,Android Studio,Android Fragments,Android Toolbar,我在尝试控制onclick以获取片段中的选项菜单时迷路了。有太多的解决方案,我甚至不知道从哪里开始 我看到一些地方,人们告诉我们使用NavController,其他地方告诉我们在activity和fragment中使用OnOptions ItemSelected,并覆盖您需要的内容。除此之外,我们还有androidx.appcompat.widget.Toolbar,它甚至不需要充气,只需在XML文件中使用app:menu=并在那里发出所有声音,但我如何聆听点击呢 我让它在活动中工作,但后来

我在尝试控制onclick以获取片段中的选项菜单时迷路了。有太多的解决方案,我甚至不知道从哪里开始

我看到一些地方,人们告诉我们使用NavController,其他地方告诉我们在activity和fragment中使用OnOptions ItemSelected,并覆盖您需要的内容。除此之外,我们还有androidx.appcompat.widget.Toolbar,它甚至不需要充气,只需在XML文件中使用app:menu=并在那里发出所有声音,但我如何聆听点击呢



我让它在活动中工作,但后来不得不使用片段,陷入了这种混乱,我只想让菜单像在活动中一样工作。

您需要在fragment onCreate()方法中调用SetHasOptions菜单:

以下是您如何对菜单进行充气并响应单击:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.refresh:
        //Repond to click
        break;
    }
    return true;
}
这是您的menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" />
</menu>

val toolbar=fragmentInflater.findViewById(R.id.ToolbarMain活动)
(活动作为AppCompatActivity)。设置支持操作栏(工具栏)
这解决了问题,现在有点累了,但我很快就会评论为什么会发生这种情况


我认为这是xml工具栏、androidx、非android工具栏x的错误导入等的混合。

在示例中,创建了一个溢出菜单,该菜单连接到AboutMe activity/fragment。它使用导航方向转到“关于我”页面-

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

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    setHasOptionsMenu(true)
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.overflow_menu, menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.about -> navigateAbout(item)
    }
    return super.onOptionsItemSelected(item)
}

private fun navigateAbout(item: MenuItem) {
    view!!.findNavController()
        .navigate(TitleFragmentDirections.actionTitleFragmentToAboutFragment())
}

重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.main_活动)
设置选项菜单(真)
}
覆盖创建选项菜单(菜单:菜单,充气机:菜单充气机){
super.onCreateOptions菜单(菜单,充气机)
充气机。充气(右菜单。溢出菜单,菜单)
}
覆盖选项ItemSelected(项:菜单项):布尔值{
时间(item.itemId){
R.id.about->navigateAbout(项目)
}
返回super.onOptionsItemSelected(项目)
}
私人娱乐导航(项目:菜单项){
查看!!.findNavController()
.导航(TitleFragmentDirections.actionTitleFragmentToAboutFragment())
}

您是否在
onCreate
中调用了
设置选项菜单(true)
?我调用了,但没有成功:(。我尝试了这个,它没有成功。还有它的java。它也会膨胀,使用app:menu=“@menu/menu\u fragment\u main”菜单也膨胀了。我看到一些地方,对于fragment,我也需要在活动中调用OnCreateOptions菜单。我也有同样的问题,但不明白这是你的答案/解决方案。实际上我正在使用NavController。好的,已经有一段时间了,让我试着记住。我想解决方案可能是使用androidx的东西,我会看看我的应用程序,看看如何使用它将在xml中设置SupportActionBar(toolbarPriority)toolbarPriority.title=“Priority”和
val toolbar = fragmentInflater.findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbarMainActivity)
        (activity as AppCompatActivity).setSupportActionBar(toolbar)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:android="http://schemas.android.com/apk/res/android">
   <item
     android:id="@+id/about"
     android:title="@string/about" />
</menu> 

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    setHasOptionsMenu(true)
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.overflow_menu, menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.about -> navigateAbout(item)
    }
    return super.onOptionsItemSelected(item)
}

private fun navigateAbout(item: MenuItem) {
    view!!.findNavController()
        .navigate(TitleFragmentDirections.actionTitleFragmentToAboutFragment())
}