我正在创建一个音乐播放器应用程序,当用户想要将任何歌曲添加到播放列表时,我想显示可用播放列表的名称,在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 中的点击事件?
如果有的话,请提出替代方案。谢谢你。