首页 > 解决方案 > OnCreateOptions 它被调用,但 OnOptionsItemSelected 它未被调用

问题描述

我有一个带有设置菜单项的 xml,我有一个按钮可以打开 OptionsMenu 并且它正在工作,但是当我在 OptionsMenu 中选择某些内容时,它不再被调用

这是我的代码。
主要活动

private PopupMenu mPopupMenu;
ImageButton settings =  findViewById(R.id.buttonSettings);


mPopupMenu = new PopupMenu(this, settings);
        MenuInflater menuInflater = mPopupMenu.getMenuInflater();
        menuInflater.inflate(R.menu.main_settings, mPopupMenu.getMenu());
        settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPopupMenu.show();
            }
        });


 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_settings, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == R.id.menuNightMode) {
            openDialog();
            return true;
        }
        return super.onOptionsItemSelected(item);

    }

  public void openDialog() {
        DialogNightMode dialogNightMode = new DialogNightMode();
        dialogNightMode.show(getSupportFragmentManager(), "test");
    }

这是 XML

   <ImageButton
        android:id="@+id/buttonSettings"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginEnd="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="17dp"
        android:background="@color/transparent"
        android:tint="@color/gray"
        android:src="@drawable/ic_settings_black_24dp" />

菜单的 Xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">    
    <item android:id="@+id/menuNightMode" android:title="@string/MainPageMenuNight" />
</menu>

标签: javaandroidxml

解决方案


您的代码丢失了MenuItemClickListener,您需要将其设置为您的PopupMenu.

设置如下

popup.show();

//Set on click listener for the menu
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
   @Override
   public boolean onMenuItemClick(MenuItem item) {
        if(id == R.id.menuNightMode) {
              openDialog();
        }
        return false;
   }
});

推荐阅读