2017-03-04 64 views
0

我有每一行的每个铃声在表演图像视图的铃声列表视图..ImageView的切换列表视图里面

这是它的观点..

Like this

现在很明显当用户点击播放按钮就应该切换到暂停按钮。我已经实现了这一点,它的所有到目前为止好..

现在我有一个问题:

我不知道如何跟踪当前正在播放的行,我的意思是如果用户想从另一行播放歌曲,首先我必须改变当前暂停切换播放,然后播放新的一行。

请问你能帮我吗?

接口(在适配器)

 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();  
    }; 

回答

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; 
    } 
} 
+0

这是接近的答案,但一旦播放按钮按下暂停按钮,它不会切换回再次播放按钮.. – Mehran

+0

你有关于如何解决这个任何想法!?我会接受并投票你的答案.. – Mehran

+0

我刚刚编辑我的帖子。当currentPosition为-1时,没有一个按钮正在播放。 – BenjaminBihr

0

克雷亚TE在适配器方法

public void update (ArrayList<Product> productList) { 
    this.productList.clear(); 
    this.productList.addAll(productList); 
    notifyDataSetChanged(); 
} 

调用方法playPauseOnClick

adapter.update(productList); 
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();  
    }; 

希望这有助于。

对不起,我英文很差。