【发布时间】:2016-12-05 15:27:58
【问题描述】:
我有一个浏览器。它有 3 页。从活动中,当按下片段上的按钮时,我必须播放一些音乐文件。在播放过程中,一些按钮将被隐藏,播放后按钮将可见。所以我使用委托在 Activity 和 Fragment 之间进行通信。播放完成后触发的委托函数,但总是返回到片段 0 或 2。总是跳过没有 1 片段。所以它要么启用第 1 页或第 3 页按钮,但不能启用第 2 页。请帮助。
(对不起我的英语不好)
我的界面:
PlayResult.java
public interface PlayResult {
void PlayCompleted(boolean output);
}
PlayActivity.java
public PlayResult playDelegate = null;
void play()
{
try
{
try {
if(mp != null && mp.isPlaying())
mp.stop();
mp = null;
}
catch (Exception ex){}
mp = MediaPlayer.create(PlayActivity.this, StaticClass.getAudioResourceId(fileName, PlayActivity.this));
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
try {
mp.stop();
mp.release();
}
catch (Exception ex){}
if(playingButton != null)
{
try {
Thread.sleep(1000);
playMusic(dm.audio, dm, null, showButton);
}
catch (Exception ex)
{
//Log.e("error thread", ex.getMessage());
}
}
else
{
playDelegate.PlayCompleted(true);
//showButton();
}
}
});
}
catch (Exception ex){ //Log.e("error playing", ex.getMessage()+ ex.getCause());
}
}
在我的片段中
viewpager_fragment.java
PlayActivity playActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate((R.layout.viewpager_layout), container, false);
_context = view.getContext();
imgButton1 = (ImageView) view.findViewById(R.id.imgButton1);
imgButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playMusic(dm.b1audio, dm, imgButton1,imgButton1);
}
});
imgButton2 = (ImageView) view.findViewById(R.id.imgButton2);
imgButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playMusic(dm.b2audio, dm, imgButton2,imgButton2);
}
});
img = (ImageView) view.findViewById(R.id.image);
img.setImageResource(StaticClass.getResourceId(dm.image, _context));
btnMoveForward = (ImageView) view.findViewById(R.id.btnMoveForward);
playActivity = (PlayActivity) getActivity();
playActivity.playDelegate = this;
}
private void showButton()
{
btnMoveBackward.setVisibility(View.VISIBLE);
btnMoveForward.setVisibility(View.VISIBLE);
btnHome.setVisibility(View.VISIBLE);
imgButton1.setVisibility(View.VISIBLE);
imgButton2.setVisibility(View.VISIBLE);
imgButton1.setEnabled(true);
imgButton2.setEnabled(true);
}
void playMusic(String fileName, final DataModel dm , final ImageView playingButton, final ImageView showButton)
{
hideButton(showButton);
playActivity.playMusic(fileName, dm, playingButton, showButton);
}
@Override
public void PlayCompleted(boolean output) {
showButton();
Log.e("Play completed del", "from delegate"+ ", dm "+dm.pageno+ btnHome.getVisibility());
}
【问题讨论】:
-
显示按钮方法未调用或按钮未切换? showButton() 中的按钮在哪里初始化?
-
这些按钮在 onCreateView() 中初始化。那里有很多垃圾代码,我没有提到它。对不起。
标签: android android-fragments delegates android-viewpager