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

And*_*ole 4 android android-fragments android-studio android-toolbar

我在尝试控制片段中选项菜单的 onclick 时迷失了方向。解决方案太多了,我什至不知道从哪里开始。

我看到一些地方人们告诉我们使用 NavController,其他人告诉我们在 Activity 和片段中使用 onOptionsItemSelected 并覆盖您需要的内容。最重要的是,我们有 androidx.appcompat.widget.Toolbar 甚至不需要膨胀,只需在 XML 文件中使用 app:menu= 并在那里繁荣,但我如何听点击?

<androidx.appcompat.widget.Toolbar
            app:menu="@menu/menu_fragment_main">
Run Code Online (Sandbox Code Playgroud)

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

Ali*_*Ali 5

您需要在片段 onCreate() 方法中调用 setHasOptionsMenu :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
Run Code Online (Sandbox Code Playgroud)

以下是如何扩展菜单并响应点击:

@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:
        //Respond to click
        break;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这是你的 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>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试过这个,但没有成功。还有它的java。它还会膨胀,使用 app:menu="@menu/menu_fragment_main" 菜单也会膨胀。我看到有些地方对于片段我也需要在活动中调用 oncreateoptionsmenu 。 (2认同)