我有一个铃声列表视图,每个铃声都有一个播放图像视图。
这是它的观点..
现在显然当用户点击播放按钮时,它应该切换到暂停按钮..我已经实现了这一点,到目前为止一切都很好:
接口(在适配器中)
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;
}
}
内部回调或任何地方都可以获得listview数据:
@Override
public void playPauseOnClick(int position) {
final Product product = productList.get(position);
if (product.paused) {
for(int i=0;i< productList.size();i++)
{
movieList.get(i).setPlayPauseId(R.drawable.ic_play);
movieList.get(i).paused = true;
}
product.setPlayPauseId(R.drawable.ic_pause);
product.paused=false;
}else {
product.setPlayPauseId(R.drawable.ic_play);
product.paused = true;
}
adapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
您可以保存一个变量“mCurrentPosition”来保存当前正在播放的曲目。
然后创建两个单独的方法,一个用于播放,一个用于暂停。只需暂停当前曲目并播放单击的曲目即可。
请记住在播放新曲目时也设置当前位置。
这样的事情:
@Override
public void onClick(View v) {
if (callback != null) {
callback.pause(mCurrentPosition);
mCurrentPosition = position;
callback.play(position);
}
}
您可能需要稍微调整一下,因为我不知道您是如何设置“回调”或“位置”的来源。我假设“getAdapterPosition()”之类的东西。但希望你可以通过这个例子看到如何做到这一点。如果没有,请发表评论。
修改以回应更新的问题:
对于界面,请执行以下操作:
public interface PlayPauseClick {
void pause(int position);
void play(int position);
}
<强> EDIT2 强>:
@Override
void pause(int position) {
if(position != null) {
Product product = productList.get(position);
product.setPlayPauseId(R.drawable.ic_play);
product.paused = true;
adapter.notifyDataSetChanged();
}
}
@Override
void play(int position) {
// Homework exercise.
}
答案 2 :(得分:0)
你可以这样做 首先,声明一个全局变量
int lastposition=null;
然后
@Override
public void playPauseOnClick(int position) {
final Product product = productList.get(position);
if(lastposition!=null)
{
Product previous = productList.get(lastposition);
previous.setPlayPauseId(R.drawable.ic_pause);
previous.paused=false;
lastposition=position;
} else lastposition=position;
if (product.paused) {
//new loadSingleView().execute(product.image_url);
//Log.d(LOG, product.image_url);
product.setPlayPauseId(R.drawable.ic_pause);
product.paused=false;
}else {
product.setPlayPauseId(R.drawable.ic_play);
product.paused = true;
}
adapter.notifyDataSetChanged();
};
将上述代码替换为活动中的代码