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