Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我无法更新屏幕组件_Android_Android Adapter_Android Seekbar - Fatal编程技术网

Android 我无法更新屏幕组件

Android 我无法更新屏幕组件,android,android-adapter,android-seekbar,Android,Android Adapter,Android Seekbar,我在ListView中有一个玩家列表。每个项目都有两个启动和停止按钮。当我点击开始颜色时,开始按钮变红并开始移动搜索栏。单击“停止”按钮时,“开始”颜色为黑色,seekbar进度变为零。当歌曲结束时,颜色按钮“开始”也变为黑色,seekbar进度变为零 holder.start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v

我在ListView中有一个玩家列表。每个项目都有两个启动和停止按钮。当我点击开始颜色时,开始按钮变红并开始移动搜索栏。单击“停止”按钮时,“开始”颜色为黑色,seekbar进度变为零。当歌曲结束时,颜色按钮“开始”也变为黑色,seekbar进度变为零

 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);
        }
    }
当我单击“停止”或歌曲结束时,播放器变为空,颜色按钮再次更改。它在所有这些方法中实现:

holder.stop.SetOnClickListener新建视图.OnClickListener{

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

如果我在播放歌曲时工作,请单击“开始另一首歌曲”。即,新歌曲开始播放,颜色按钮“开始”变为红色,“上一个”按钮“再次开始”变为黑色,则我希望使用相同的功能

为此,当您单击开始调用方法时:

releaseMP();
startPlayProgressUpdater(holder.seekBar, holder.start);
这个方法是有效的,但是数据没有被清除。但是如果我点击Stop,那么之前所有歌曲的数据都被清除了。我做错了什么

我想你的意思是调用reset,而不是单击stop按钮中的release。试着在顶部的主容器中调用release

reset()
此方法重置媒体播放器

release()

此方法释放与MediaPlayer对象连接的任何资源

您所说的数据是什么意思?您丢失了进度条位置,或者完全丢失了歌曲?进度条位置和开始按钮颜色当歌曲结束时,称为releaseMP;并且全部清除,但当您单击开始时,我调用相同的方法,但它无法解决问题I它不适用于播放器和seekbar按钮。更准确地说,是使用方法调用,该调用会清除它们。在recordBeans.getglobal_position.setPlayfalse;start.setTextColorColor.BLACK;recordBeans.getglobal_position.setSeekPos0;seekbar.setProgress0;recordBeans.getglobal_position.setPlayfalse;和recordBeans.get中global_position.setSeekPos0;已正确触发,但更新失败
release()