728x90

ArrayList 로 선택한 노래만 팝업 메뉴로 만드는 방법을 구현하고 적어둔다.


팝업은 API 레벨 11 이상에서만 사용할 수 있다.
PopupMenu(Context context, View anchor)
- 두번째 인수는 팝업 메뉴를 표시할 앵커 뷰를 지정


popupMenu.getMenu().add(group_id, item_id, order, "노래타이틀");

popupMenu.getMenu().add(Menu.NONE, i, Menu.NONE, list.get(i).getTitle());

Menu.NONE 대신에 0 을 넣어도 된다.



//import android.support.v7.widget.PopupMenu; // ==> 이줄 추가하면 에러 발생함
import android.widget.PopupMenu;  // ==> 에러 발생 안함
import android.view.Menu;
import android.view.MenuItem;


 //import android.support.v7.widget.PopupMenu;
import android.widget.PopupMenu;
import android.view.Menu;
import android.view.MenuItem;

public class Player extends AppCompatActivity implements View.OnClickListener {
    private ImageButton btnPlaylist;

    private ArrayList<Song_Item> list;
    private MediaPlayer mediaPlayer;
    private int position = 0; // 현재 재생곡 위치

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);

        Intent intent = getIntent();
        list =(ArrayList<Song_Item>) intent.getSerializableExtra("playList");
        mediaPlayer = new MediaPlayer();

        // All player buttons
        btnPlaylist = (ImageButton) findViewById(R.id.btnPlaylist);

        btnPlaylist.setOnClickListener(this); // 곡 선택창

        System.out.println("선택된 노래곡수 = " + list.size());
        playMusic(list.get(position)); // 노래 곡
        seekBar_Progressing();
    }

    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnPlaylist:
                // 팝업 메뉴 나오게 하는 방법
                PopupMenu popupMenu = new PopupMenu(this, v);
                Menu menu = popupMenu.getMenu();
                for(int i=0; i < list.size();i++){

                    //Popup Menu에 들어갈 MenuItem 추가

                    menu.add(0,i,0,list.get(i).getTitle());
                }

                //메뉴가 클릭했을때 처리하는 부분

                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        int i = item.getItemId();
                        Toast.makeText(Player.this, item.getTitle() + " 선택했습니다", Toast.LENGTH_SHORT).show();
                        playMusic(list.get(i)); // 노래 곡
                        return true;
                    }
                });
                popupMenu.show();
                break;
        }
    }

    public void playMusic(Song_Item song_item) {
        try {
            seek_bar.setProgress(0);
            songTitleLabel.setText(song_item.getTitle());
            mediaPlayer.reset();
            mediaPlayer.setDataSource(song_item.getDataPath());
            mediaPlayer.prepare();
            mediaPlayer.start(); // 노래 재생 시작

            seek_bar.setMax(mediaPlayer.getDuration()); // 음악파일의 전체길이
            seek_bar.setProgress(mediaPlayer.getCurrentPosition());
            if(mediaPlayer.isPlaying()){
                btnPlay.setVisibility(View.GONE);
                btnPause.setVisibility(View.VISIBLE);
            } else {
                btnPlay.setVisibility(View.VISIBLE);
                btnPause.setVisibility(View.GONE);
            }

            /* Album Art Bitmap을 얻는다. */
            final Uri artworkUri = Uri.parse("content://media/external/audio/albumart");
            ImageView mImgAlbumArt = (ImageView) findViewById(R.id.albumart);
            Uri albumArtUri = ContentUris.withAppendedId(artworkUri, song_item.getAlbumId());
            Picasso.with(Player.this)
                    .load(albumArtUri)
                    .resize(800,800)
                    .into(mImgAlbumArt);

        } catch (IOException e) {
            e.getMessage();
            Toast.makeText(Player.this, "Error!!", Toast.LENGTH_SHORT).show();
        }
    }
}



미리 정해진 xml 을 메뉴로 만드는 방법

https://www.tutlane.com/tutorial/android/android-popup-menu-with-examples


https://www.javatpoint.com/android-popup-menu-example 를 참조하면 도움된다.


블로그 이미지

Link2Me

,