Android Call Popup Menu

时间:2013-10-03 16:00:43

标签: java android popupmenu

我正在开发一个简单的音乐播放器,用于我的Android应用类介绍。我希望能够将歌曲添加到我的上下文菜单中列出的播放列表中。当我点击我的addtoplaylist contextmenuitem时,我希望我的弹出菜单出现。 如何调用弹出菜单?此外,如果您对如何填充弹出菜单有一些建议,而不是我的for循环,那也很酷。

我有一个contextmenu监听器,看起来像这样。

    @Override
public boolean onContextItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.share:
            shareIt();
            return true;
        case R.id.Store:
            musicStore();
            return true;
        case R.id.addtoplaylist:
        // open popup menu
            return true;
        case R.id.snippet:
            snippet(tem1);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}    

我有一个看起来像这样的弹出菜单。

        public void showPopup(View v) {

    int i = view.getPlaylists().size();
    ArrayList<String> playlist = view.getPlaylists();

    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.popup_menu, popup.getMenu());
    for(int k = 0; k > i;k++){
        popup.getMenu().add(playlist.get(k));
    }

    popup.show();
}

2 个答案:

答案 0 :(得分:0)

正如您在此处所见PopupMenu V只是一个锚点,因此您可以传递包含项目的ListView 或者,如果您确实希望将弹出菜单锚定到该项目,请查看here

你可以得到这样的目标视图。

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
View  v = info.targetView;

呼叫后

showPopUp(v);

对于你的循环,我没有看到更好的解决方案。

答案 1 :(得分:0)

接受的问题很好,但对于for循环部分,你可以使用迭代器:)

for (String song : playlist) {
    popup.getMenu().add(song);
}