1

私は音楽プレーヤー アプリを作成しています。ユーザーが曲をプレイリストに追加したいときに、利用可能なプレイリストの名前を表示したいと考えています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 を使用しています。だから私の質問は、実行時にメニュー項目を追加した場合、スイッチケースでクリックイベントを処理する方法ですか?

代替案があれば提案してください。ありがとうございました。

4

0 に答える 0