OnCreateOptions被调用,但OnOptionsItemSelected不被调用

时间:2018-11-26 10:27:31

标签: java android xml

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

这是我的代码。
MainActivity

/var/lib/{{ daemon_name }}/main.py - main file
/var/run/{{ daemon_name }}/{{ daemon_name }}.pid
/var/log/{{ daemon_name }}/{{ daemon_name }}.log

这是Xml

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" />

1 个答案:

答案 0 :(得分:1)

您的代码缺少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;
   }
});