【问题标题】:Handling popup menu items click处理弹出菜单项点击
【发布时间】:2015-05-25 10:36:07
【问题描述】:

我已经为我的 android 应用程序实现了一个弹出菜单。我为弹出菜单创建了一个 xml,代码也可以正常工作。现在我想不通的是如何处理弹出菜单项的点击。我试过使用 PopupMenu.OnMenuItemClickListener 但没有成功。我该怎么做?

我的弹出菜单代码

ImageButton button = (ImageButton) view.findViewById(R.id.popUp_song);

            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    PopupMenu popup = new PopupMenu(activity, v);
                    Menu m = popup.getMenu();
                    MenuInflater inflater = popup.getMenuInflater();
                    inflater.inflate(R.menu.song_popup, popup.getMenu());

                    if (audio.getDownload().equals("0")) {

                        m.removeItem(R.id.add_download);

                    }

                    popup.show();
                }


            });

xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/ToolBarStyle">

    <item
        android:id="@+id/add_queue"
        android:title="Add to queue" />
    <item
        android:id="@+id/play_next"
        android:title="Add to favourite" />
    <item
        android:id="@+id/add_download"
        android:title="Download" />


</menu>

【问题讨论】:

    标签: android onitemclicklistener popupmenu


    【解决方案1】:

    在显示PopupMenu 之前,为PopupMenu 添加一个侦听器以处理点击事件。

    popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
    
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            Toast.makeText(getApplicationContext(),
                                    item.getTitle(), Toast.LENGTH_SHORT).show();
                            return true;
                        }
                    });
    

    【讨论】:

      【解决方案2】:

      如果你需要根据id点击弹出菜单,下面是正确的做法:

       popup.setOnMenuItemClickListener(item -> {
                 if (item.getItemId() == R.id.miEmail) {
                      Toast.makeText(getApplicationContext(), "Email clicked", Toast.LENGTH_SHORT).show();
                  } else if (item.getItemId() == R.id.miCall) {
                      Toast.makeText(getApplicationContext(), "Call clicked", Toast.LENGTH_SHORT).show();
                  }
      
                  return true;
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多