【问题标题】:Audio Player - How to play next and prev songs using ListView音频播放器 - 如何使用 ListView 播放下一首和上一首歌曲
【发布时间】:2014-11-11 06:04:11
【问题描述】:

编写一个小型音频播放器,我想让用户在用户点击相应按钮时播放上一首和下一首歌曲,我正在使用列表视图列出所有歌曲

private int currentSongIndex = 0;

listview.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
    long id) {                  

     strNURL = videoMovieArrayList.get(position).getUrl().toString();
     strNTITLE = videoMovieArrayList.get(position).getTitle().toString();

             if(mediaPlayer!=null && mediaPlayer.isPlaying())
                   try {
                           mediaPlayer.stop();
                        } catch (Exception e) {     
                    }
                          play(arg1);
                          textTrack.setText(strNTITLE);
                        }
                 });        
            }

    public void play(View view){    
       mediaPlayer = new MediaPlayer();
       mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mediaPlayer.setDataSource(strNURL);
        } catch (IllegalArgumentException e) {
        .......................

      mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer arg0) {
            // TODO Auto-generated method stub
            pauseButton.setEnabled(false);
            playButton.setEnabled(true);                
           }
       });
   }

   public void prev(View view){ 
        Toast.makeText(MusicTrackActivity.this, "Previous song !", Toast.LENGTH_LONG).show();

       if(currentSongIndex > 0){
          // play(currentSongIndex - 1);
           currentSongIndex = currentSongIndex - 1;
       }else{
           // play last song
           // playSong(videoMovieArrayList.size() - 1);
           currentSongIndex = videoMovieArrayList.size() - 1;
       }
   }

   public void next(View view){ 
        Toast.makeText(MusicTrackActivity.this, "Next song !", Toast.LENGTH_LONG).show();

        if(currentSongIndex < (videoMovieArrayList.size() - 1)){        
             // play(currentSongIndex + 1);
            currentSongIndex = currentSongIndex + 1;
        }else{          
            // play(0);
            currentSongIndex = 0;
        }
   }

所以现在我的查询是我如何切换到下一首歌曲,每当用户点击下一个按钮时,正如您在上面的代码中看到的,我只是显示 Toast 消息

【问题讨论】:

    标签: android listview audio


    【解决方案1】:
    btnNext.setOnClickListener(new View.OnClickListener() {
    
    
                 int  currentSongIndex= 0; 
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
    
                    if(currentSongIndex < (songsList.size() - 1)){
                        playSong(currentSongIndex + 1);
                        currentSongIndex = currentSongIndex + 1;
                    }else{
                        // play first song
                        plysong(songindex);
                    }
    
    
    
    
    
    
    
                }
            });
    

    【讨论】:

      【解决方案2】:

      您需要在变量中跟踪正在播放的歌曲的索引,例如current

      假设您的适配器基础数据将歌曲的 URI 存储在 ArrayList 中,并且用户按“下一步”,请检查 current + 1 是否在 ArrayList 之外。如果是这样,请不要播放该歌曲。但是,如果没有,请从ArrayList 获取数据,将MediaPlayersetDataSource() 重置为MediaPlayer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        相关资源
        最近更新 更多