Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Java Android:在MediaPlayer音频结束后更改按钮文本_Java_Android - Fatal编程技术网

Java Android:在MediaPlayer音频结束后更改按钮文本

Java Android:在MediaPlayer音频结束后更改按钮文本,java,android,Java,Android,所以我在看Big Nerd Ranch的Android编程书,我有一个通过MediaPLayer播放的音频文件。我还有一个按钮,可以播放和暂停音频。如果按播放按钮播放音频,按钮上的文字将变为“暂停”。问题是音频结束后,按钮仍显示“暂停”,因此用户必须按两次按钮才能再次播放音频。如何让按钮将其文本更改为“音频结束后立即播放” 下面是我的代码减去按钮的布局xml 片段类: 公共类HelloMonFragment扩展了片段{ 私人按钮; 私人按钮mStopButton; private AudioPl

所以我在看Big Nerd Ranch的Android编程书,我有一个通过MediaPLayer播放的音频文件。我还有一个按钮,可以播放和暂停音频。如果按播放按钮播放音频,按钮上的文字将变为“暂停”。问题是音频结束后,按钮仍显示“暂停”,因此用户必须按两次按钮才能再次播放音频。如何让按钮将其文本更改为“音频结束后立即播放”

下面是我的代码减去按钮的布局xml

片段类:

公共类HelloMonFragment扩展了片段{
私人按钮;
私人按钮mStopButton;
private AudioPlayer mPlayer=新的AudioPlayer();
@凌驾
创建视图上的公共视图(LayoutFlater充气器、视图组父级、捆绑保存状态){
视图v=充气机。充气(R.layout.fragment\u hello\u moon,父项,false);
mPlayButton=(Button)v.findViewById(R.id.hellomon\u playButton);
mPlayButton.setText(“播放”);
mPlayButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
if(mPlayButton.getText().equals(“Play”)){
mPlayButton.setText(“暂停”);
mPlayer.play(getActivity());
}
else if(mPlayButton.getText().equals(“暂停”)){
mPlayButton.setText(“播放”);
mPlayer.pause();
}
}
});
mStopButton=(Button)v.findViewById(R.id.hellomon\u stopButton);
mStopButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
mPlayer.stop();
mPlayButton.setText(“播放”);
}
});
返回v;
}
@凌驾
公共空间{
super.ondestory();
mPlayer.stop();
}
}
MediaPlayer类:

package com.bignerdranch.android.hellomon;
导入android.content.Context;
导入android.media.MediaPlayer;
公共级音频播放器{
私有媒体播放器mPlayer;
私有布尔值mcompletted=false;
公共停车场(){
if(mPlayer!=null){
mPlayer.release();
mPlayer=null;
}
}
公共虚空游戏(上下文c){
if(mPlayer==null){
mPlayer=MediaPlayer.create(c,R.raw.一小步);
mPlayer.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
完成时的公共作废(MediaPlayer mp){
停止();
mCompleted=真;
}
});
}
mPlayer.start();
}
公共空间暂停(){
如果(mPlayer!=null)mPlayer.pause();
}
}

如果直接在活动中使用
MediaPlayer
类,则可以使用其
OnCompletionListener
检测媒体是否停止播放。在这个
OnCompletionListener
中,您可以将按钮的文本从“暂停”切换到“播放”,如下所示:

我将您的音频播放器集成到片段中,使其看起来像:

public class HelloMoonFragment extends Fragment {

    private Button mPlayButton;
    private Button mStopButton;

    private MediaPlayer mPlayer;
    private boolean mCompleted =  false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_hello_moon, parent, false);

        mPlayButton = (Button) v.findViewById(R.id.hellomoon_playButton);
        mPlayButton.setText("Play");

        mPlayButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {

                if(mPlayer == null) {
                    mPlayer = MediaPlayer.create(c, R.raw.one_small_step);
                    mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        public void onCompletion(MediaPlayer mp) {
                            stopMediaPlayer();
                            mPlayButton.setText("Play");
                        }
                    });
                }

                if(mPlayButton.getText().equals("Play")) {
                    mPlayButton.setText("Pause");
                    mPlayer.start();
                }
                else if(mPlayButton.getText().equals("Pause")){
                    mPlayButton.setText("Play");
                    mPlayer.pause();
                }
            }
        });

        mStopButton = (Button)v.findViewById(R.id.hellomoon_stopButton);
        mStopButton.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
                stopMediaPlayer();
                mPlayButton.setText("Play");
           }
        });

        return v;
    }

    @Override
    public void onDestroy() {
        stopMediaPlayer();
        super.onDestroy();
    }


    public void stopMediaPlayer() {
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }
}

老实说,我认为
AudioPlayer
类是没有必要的,而且似乎是多余的。如果您认为需要(即,您将向类中添加其他方法/功能,使其比
MediaPlayer
更具体),请在您的问题中解释原因,我将编辑我的答案。
public class HelloMoonFragment extends Fragment {

    private Button mPlayButton;
    private Button mStopButton;

    private MediaPlayer mPlayer;
    private boolean mCompleted =  false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_hello_moon, parent, false);

        mPlayButton = (Button) v.findViewById(R.id.hellomoon_playButton);
        mPlayButton.setText("Play");

        mPlayButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {

                if(mPlayer == null) {
                    mPlayer = MediaPlayer.create(c, R.raw.one_small_step);
                    mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        public void onCompletion(MediaPlayer mp) {
                            stopMediaPlayer();
                            mPlayButton.setText("Play");
                        }
                    });
                }

                if(mPlayButton.getText().equals("Play")) {
                    mPlayButton.setText("Pause");
                    mPlayer.start();
                }
                else if(mPlayButton.getText().equals("Pause")){
                    mPlayButton.setText("Play");
                    mPlayer.pause();
                }
            }
        });

        mStopButton = (Button)v.findViewById(R.id.hellomoon_stopButton);
        mStopButton.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
                stopMediaPlayer();
                mPlayButton.setText("Play");
           }
        });

        return v;
    }

    @Override
    public void onDestroy() {
        stopMediaPlayer();
        super.onDestroy();
    }


    public void stopMediaPlayer() {
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }
}