我有一个铃声列表视图,每个铃声都有一个播放图像视图。
这是它的观点..
现在显然当用户点击播放按钮时,它应该切换到暂停按钮..我已经实现了这一点,到目前为止它都很好..
现在我遇到了一个问题:
我不知道如何跟踪当前播放的行,我的意思是如果用户想要播放另一行的歌曲,首先我必须更改当前的暂停切换以播放,然后播放新的。
你能帮我解决这个问题吗?接口(在适配器中)
public interface PlayPauseClick {
void playPauseOnClick(int position);
}
private PlayPauseClick callback;
public void setPlayPauseClickListener(PlayPauseClick listener) {
this.callback = listener;
}
适配器(在getView中)
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 (product.paused) {
product.setPlayPauseId(R.drawable.ic_pause);
product.paused=false;
}else {
product.setPlayPauseId(R.drawable.ic_play);
product.paused = true;
}
adapter.notifyDataSetChanged();
};
答案 0 :(得分:1)
您可以存储在适配器中播放的当前歌曲的索引。
所以你只需要在点击其他按钮时打开暂停。
在适配器中:
int currentPosition = -1;
...
if (callback != null) {
callback.playPauseOnClick(position);
if (currentPosition == -1){
currentPosition = position;
} else if (currentPosition == position){
currentPosition = -1;
} else if (currentPosition != -1 && currentPosition != position){
callback.playPauseOnClick(currentPosition);
currentPosition = position;
}
}
答案 1 :(得分:0)
在适配器方法
中创建public void update (ArrayList<Product> productList) {
this.productList.clear();
this.productList.addAll(productList);
notifyDataSetChanged();
}
playPauseOnClick
中的调用方法
adapter.update(productList);
答案 2 :(得分:0)
这是一个解决方案:
在您的活动中创建一个类字段private Product mCurrentProduct;
然后:
@Override
public void playPauseOnClick(int position) {
final Product product = productList.get(position);
if (mCurrentProduct == null) {
mCurrentProduct = product)
}
if (mCurrentProduct == product) {
if (product.paused) {
product.setPlayPauseId(R.drawable.ic_pause);
product.paused=false;
}else {
product.setPlayPauseId(R.drawable.ic_play);
product.paused = true;
}
} else {
if (!mCurrentProduct.paused) {
product.setPlayPauseId(R.drawable.ic_play);
product.paused = true;
}
product.setPlayPauseId(R.drawable.ic_pause);
product.paused=false;
mCurrentProduct = product;
}
adapter.notifyDataSetChanged();
};
希望这有帮助。
抱歉我的英语很差。