我无法更新屏幕组件

时间:2014-11-17 09:51:30

标签: android android-adapter android-seekbar

我有一个播放器列表(ListView)。每个项目都有两个按钮“开始”和“停止”。当我点击“开始”颜色“开始”按钮改变红色并开始移动搜索栏。当点击“停止”按钮颜色“开始”时,开始为黑色,搜索栏进度变为零。当歌曲以彩色按钮结束时,“开始”也变为黑色,搜索栏进度变为零。

 holder.start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                releaseMP();
                startPlayProgressUpdater(holder.seekBar, holder.start);
                try {
                    mediaPlayer = new MediaPlayer();
                    global_position = position;
                    mediaPlayer.setDataSource(recordBeans.get(global_position).getFile());
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mediaPlayer.prepareAsync();
                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mediaPlayer) {
                            holder.seekBar.setMax(mediaPlayer.getDuration());
                            mediaPlayer.start();
                            recordBeans.get(global_position).setPlay(true);
                            holder.start.setTextColor(Color.RED);
                            startPlayProgressUpdater(holder.seekBar, holder.start);
                        }
                    });

                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            releaseMP();
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

这是通过以下方法实现的:

public void startPlayProgressUpdater(final SeekBar seekBar, final Button start) {
        if (mediaPlayer != null) {
            recordBeans.get(global_position).setSeekPos(mediaPlayer.getCurrentPosition());
            if ((Integer) seekBar.getTag() == global_position) {
                seekBar.setProgress(recordBeans.get(global_position).getSeekPos());
            }
            Runnable notification = new Runnable() {
                public void run() {
                    startPlayProgressUpdater(seekBar, start);
                }
            };
            handler.postDelayed(notification, 1000);
        } else {
            recordBeans.get(global_position).setPlay(false);
            start.setTextColor(Color.BLACK);
            recordBeans.get(global_position).setSeekPos(0);
            seekBar.setProgress(0);
        }
    }

当我点击“停止”或歌曲结束时,播放器变为NULL并再次更改颜色按钮。它在所有这些方法中实现:

holder.stop.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View v) {
        if ((Integer) v.getTag() == global_position && mediaPlayer != null) {
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }
});

private void releaseMP() {
    if (mediaPlayer != null) {
        try {
            mediaPlayer.release();
            mediaPlayer = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果我在播放歌曲时工作,我想要相同的功能点击“开始”另一首歌。即一首新歌开始播放,彩色按钮“开始”变为红色,前一个按钮“开始”再次变黑。

为此我点击“开始”调用方法时:

releaseMP();
startPlayProgressUpdater(holder.seekBar, holder.start);

并且该方法有效但数据未清除。但如果我点击“停止”,则清除所有之前歌曲的数据。我做错了什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为您打算在停止按钮OnClick中调用reset(),而不是release()。尝试在主容器OnStop()

中调用release()
reset()

此方法重置媒体播放器

release()

此方法释放附加了MediaPlayer对象的所有资源