我有一个铃声的列表视图,每个铃声的每一行都有一个播放图像视图。
这是它的观点。
现在很明显,当用户点击播放按钮时,它应该切换到暂停按钮。
现在我遇到了一个问题:
我单击一个播放按钮,它将变为暂停按钮,但在此期间,当我点击另一行的播放按钮时,它需要两次点击,直到第二个变成暂停按钮。
这是我的代码:
适配器
Product product = (Product) mDataItems.get(position);
holder.playPause=(ImageView)v.findViewById(R.id.playPause);
holder.playPause.setImageResource(product.getPlayPauseId());
holder.playPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (callback != null) {
callback.playPauseOnClick(position);
}
}
});
活动
@Override
public void playPauseOnClick(int position) {
final Product product = productList.get(position);
if (paused) {
product.setPlayPauseId(R.drawable.ic_pause);
paused=false;
}else {
product.setPlayPauseId(R.drawable.ic_play);
paused = true;
}
adapter.notifyDataSetChanged();
};
我已经在猜测问题是在我的情况下
if(paused){
}
如果你能给我一个更好的逻辑,我将不胜感激
答案 0 :(得分:2)
您为所有行使用了一个pause
字段,因此第一次点按将其状态更改为true
,另一行的第二次点击将其更改为false
并设置可绘制的行
product.setPlayPauseId(R.drawable.ic_pause)
在第一行和第三个点击工作正常。
您可以为每个pause
定义product
字段,并在if子句中检查产品暂停字段
if(product.pause){
...
product.paused = false;
}else{
product.paused = true;
}
答案 1 :(得分:0)
这是一个更简洁的案例,我做的是我在RecyclerView中从url流音频铃声..使类变量为 private int oldPosition = -1; ,使用此变量,您将跟踪当前在RecyclerView中播放音频的行
Sub RangeSel()
Dim ColA As Range
Dim ColC As Range
Set ColC = Cells("C" & Cells.Rows.Count).End(xlUp)
Set ColA = Cells("A" & Cells.Rows.Count).End(xlUp)
ColC.Copy (ColA)
End Sub
此方法更新正在播放的旧行 updateViewAtPosition(false,false);
@Override
public void onRecyclerViewChildItemClick(BaseRecyclerViewHolder holder, int resourceId) {
super.onRecyclerViewChildItemClick(holder, resourceId);
switch (resourceId) {
case R.id.media_play_container:
int position = holder.getAdapterPosition();
if (oldPosition != -1)
resetResources();
if (oldPosition == position) {
resetResources();
oldPosition = -1;
return;
}
updateViewAtPosition(false, false); // update old selected view
oldPosition = position; // update position
BaseRecyclerViewAdapter adapter = (BaseRecyclerViewAdapter) getRecyclerView().getAdapter();
AudioItem item = (AudioItem) adapter.getItemAt(oldPosition);
String url = item.getAudioPreviewUrl();
// if url is valid show progress and play
if (AppUtils.ifNotNullEmpty(url)) {
updateViewAtPosition(true, false);
playRingtone(url);
}
break;
case R.id.iv_media_favorite:
break;
}
}
//重置媒体播放器 resetResources();
private void updateViewAtPosition(boolean isLoading, boolean isPlaying) {
RecyclerView recyclerView = getRecyclerView();
if (recyclerView == null || oldPosition == -1)
return;
BaseRecyclerViewAdapter adapter = (BaseRecyclerViewAdapter) recyclerView.getAdapter();
if (adapter == null)
return;
AudioItem item = (AudioItem) adapter.getItemAt(oldPosition);
item.setPlaying(isPlaying);
item.setLoading(isLoading);
adapter.update(oldPosition, item);
adapter.notifyItemChanged(oldPosition);
}