【发布时间】:2014-01-15 15:31:45
【问题描述】:
情况:
我有一个应用程序,它有几个元素的自定义列表视图,这些元素有一个播放按钮来播放相应的媒体。就其本身而言,这很有效。 我决定,能够停止播放剪辑可能是个好主意,所以我为每个列表视图项目添加了一个停止按钮,但将可见性设置为 GONE,直到播放某些内容。
代码:
ImageButton bplay = (ImageButton) itemView.findViewById(R.id.item_bplay);
bplay.setTag(currentClip.getFile());
bplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finalItemView.findViewById(R.id.item_bplay).setVisibility(View.GONE);
finalItemView.findViewById(R.id.item_bstop).setVisibility(View.VISIBLE);
mp.release();
mp = MediaPlayer.create(getApplicationContext(), currentClip.getFile());
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
finalItemView.findViewById(R.id.item_bplay).setVisibility(View.VISIBLE);
finalItemView.findViewById(R.id.item_bstop).setVisibility(View.GONE);
}
});
}
});
ImageButton bstop = (ImageButton) itemView.findViewById(R.id.item_bstop);
bstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mp.release();
finalItemView.findViewById(R.id.item_bplay).setVisibility(View.VISIBLE);
finalItemView.findViewById(R.id.item_bstop).setVisibility(View.GONE);
}
});
说明:
只要用户只专注于一个剪辑,它就可以正常工作。播放按钮被停止按钮取代,停止按钮停止剪辑,或者如果您让剪辑用完,按钮也会切换回来。
问题:
如果用户决定通过点击列表中的第二个元素上的播放来中断播放,第一个元素将被停止按钮卡住。由于停止按钮只执行 mp.release(),所以第一个元素的停止按钮现在能够停止第二个剪辑的播放。 由于这一切都发生在列表视图中,因此当单击第二个项目时,我不再有权访问第一个以再次替换按钮。 我寻找一种方法来捕捉中断(很像 mp.setOnCompletionListener 寻找成功完成)并重置按钮,但到目前为止,我想不出任何东西。 实际上,我喜欢这样一个事实,即通过先发布,然后创建一个新的媒体播放器,然后启动它,用户只需在另一个剪辑上按播放即可在剪辑之间快速切换。我只是希望原始剪辑上的停止按钮在新剪辑开始后消失。
问题:
- 当用户决定切换到另一个剪辑而不停止第一个剪辑时,我该如何捕捉?
- 我切换按钮的方法是否有意义?有更好的选择吗?
【问题讨论】:
标签: android android-listview android-mediaplayer