ImageView在listview中切换

时间:2017-03-04 11:50:22

标签: android listview interface adapter

我有一个铃声列表视图,每个铃声都有一个播放图像视图。

这是它的观点..

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

3 个答案:

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

希望这有帮助。

抱歉我的英语很差。