ImageView按钮在列表视图中切换

时间:2017-03-04 07:45:33

标签: android listview android-studio adapter baseadapter

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

这是它的观点。

Like this

现在很明显,当用户点击播放按钮时,它应该切换到暂停按钮。

现在我遇到了一个问题:

我单击一个播放按钮,它将变为暂停按钮,但在此期间,当我点击另一行的播放按钮时,它需要两次点击,直到第二个变成暂停按钮。

这是我的代码:

适配器

    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){
  }

如果你能给我一个更好的逻辑,我将不胜感激

2 个答案:

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