1

我正在创建一个音乐播放器应用程序,当用户想要将任何歌曲添加到播放列表时,我想显示可用播放列表的名称,在contextMenu.

所以整个场景是:当用户长按任何歌曲时,会显示contextMenu一个名为的选项之一Add to playList。当用户单击该菜单项时,将显示具有先前可用的播放列表contextMenu的选项Create a new PlayList和名称(如果有)的另一个。

快照:

在此处输入图像描述

现在的问题是,为了显示以前存储的播放列表的名称,我想我必须在运行时动态生成这个菜单项。我添加菜单项的代码是:

    @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    if(contextMenuFlag){

        menu.setHeaderTitle(songToDisplay);
        menu.add(Menu.NONE, PLAY_SONG, Menu.NONE, "Play");
        menu.add(Menu.NONE, ADD_TO_PLAY_LIST, Menu.NONE, "Add to Playlist");
    }
    else{
        contextMenuFlag = true;
        menu.setHeaderTitle("Add to Playlist");
        menu.add(Menu.NONE, CREATE_PLAYLIST, Menu.NONE, "-Create a new Playlist");
        menu.add(Menu.NONE, 10, Menu.NONE, "Old Playlists if exists");
    }
    //Toast.makeText(MainActivity.this,v+"",Toast.LENGTH_SHORT).show();
}

在这里使用循环,我想我可以动态添加菜单项。但问题在于处理菜单项上的点击事件。此事件处理的代码是:

    @Override
public boolean onContextItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case PLAY_SONG: {
            songClick(MyView);
        }
        break;
        case ADD_TO_PLAY_LIST: {

            contextMenuFlag = false;
            songView.post(new Runnable() {

                @Override
                public void run() {
                    songView.showContextMenu();
                }
            });
        }
        break;
        case CREATE_PLAYLIST:{
            addToPlayList();
        }
        break;
    }
    return super.onContextItemSelected(item);
}

在这里,我为每个菜单项 ID 使用 switch case。所以我的问题是,如果我在运行时添加了菜单项,如何处理 switch case 中的点击事件?

如果有的话,请提出替代方案。谢谢你。

4

0 回答 0