私は音楽プレーヤー アプリを作成しています。ユーザーが曲をプレイリストに追加したいときに、利用可能なプレイリストの名前を表示したいと考えていますcontextMenu
。
したがって、シナリオ全体は次のとおりです。ユーザーが任意の曲を長押しする
contextMenu
と、名前付きのオプションの 1 つ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 を使用しています。だから私の質問は、実行時にメニュー項目を追加した場合、スイッチケースでクリックイベントを処理する方法ですか?
代替案があれば提案してください。ありがとうございました。