【问题标题】:Android onMenuItemClick() - detect which menu clicked?Android onMenuItemClick() - 检测点击了哪个菜单?
【发布时间】:2016-02-08 14:11:42
【问题描述】:

我目前正在编写一个简单的应用程序,该应用程序使用 2 个按钮锚定弹出菜单,当按下按钮时将显示这些按钮。这很简单,但是我在使用 onMenuItemClick() 方法时遇到了问题,我想用它来将按钮的文本更改为被点击的菜单项。

因为我有两个弹出菜单,每个都有 3 个项目,这是否意味着我必须在 onMenuItemClick() 中编写 6 个不同的 if 语句,每个语句都试图检测从哪个菜单中单击了哪个项目?还是有更简单的方法,例如指定 2 个 onMenuItemClick() 方法,每个方法链接到单独的 2 个菜单?

public class MainActivity extends AppCompatActivity implements OnMenuItemClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void showColourPopUpMenu(View v){
        PopupMenu coloursPopUpMenu = new PopupMenu(this, v);
        coloursPopUpMenu.setOnMenuItemClickListener(this);
        coloursPopUpMenu.inflate(R.menu.colours_menu);
        coloursPopUpMenu.show();
    }

    public void showShapePopUpMenu(View v){
        PopupMenu shapesPopUpMenu = new PopupMenu(this, v);
        shapesPopUpMenu.setOnMenuItemClickListener(this);
        shapesPopUpMenu.inflate(R.menu.shape_menu);
        shapesPopUpMenu.show();
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        //How to determine which menu clicked?
        return false;
    }
}

【问题讨论】:

  • 你可以去switch语句...请参考答案

标签: android button view menu popup


【解决方案1】:
@Override
public boolean onMenuItemClick(MenuItem item) {
    int id = item.getItemId()
    switch(id) {
     case R.id.item1:
          return true;
     case R.id.item2:
          return true;
     default:
          return false;
    }
}

【讨论】:

    【解决方案2】:

    在分配时创建监听器。

    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            return true;
        }
    });
    

    【讨论】:

      【解决方案3】:

      这是不可能的。您至少需要将项目 ID item.getItemId() 映射到它们所连接的菜单(按钮)。

      也许更简单的可能是使用如下组:menu/colours_menu.xml

      <menu xmlns:android="http://schemas.android.com/apk/res/android" >
          <group android:id="@+id/colours_menu" >
              <item android:id="@+id/item1" ... />
              <item android:id="@+id/item2" ... />
              <item android:id="@+id/item3" ... />
          </group>
      </menu>
      

      使用item.getGroupId(),您将获得组 ID,只需将它们映射到按钮:

      @Override
      public boolean onMenuItemClick(MenuItem item) {
          if (item.getGroupId() == R.id.colours_menu) {
              // edit colors menu
          } else {
              // edit shape menu
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 2016-08-18
        • 1970-01-01
        • 2022-01-26
        相关资源
        最近更新 更多