2017-03-04 60 views
0

我有一個鈴聲列表視圖,每個鈴聲的每行都有一個播放圖像視圖。ImageView Button在列表視圖內切換

這是它的觀點。

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

我將不勝感激,如果是第一次輕觸其狀態更改爲true第二水龍頭上,另一排它改變false你可以給我一個更好的邏輯

+0

如果我是理解正確的,你想玩一個水龍頭/切換播放。到任何其他行權?因爲您可以跟蹤現在正在播放的行。停止該行的播放器並播放音頻,更改新拍攝的行的圖像。 –

+0

你提出了一個很好的觀點。你有任何關於如何跟蹤播放行的建議嗎?我的意思是我必須先停止播放歌曲,然後播放新歌。我知道這與我的原始問題無關,但是如果您可以準備一個answare for它和我會投票給你 – Mehran

回答

2

您正在使用一個pause場的所有行並設置可繪製

product.setPlayPauseId(R.drawable.ic_pause) 

在第一行和第三個水龍頭正常工作。

您可以定義pause場,每product和內部的if語句檢查產品暫停申請

if(product.pause){ 
    ... 
    product.paused = false; 
}else{ 
    product.paused = true; 
} 
0

下面是這個我所做的是我在RecyclerView流音頻鈴聲從URL中slimier情況..使類變量爲 private int oldPosition = -1;,這個變量,你會跟蹤該行當前正在播放的音頻RecyclerView

@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; 
    } 
} 

此方法更新舊行正在播放 updateViewAtPosition(假的,假的);

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

//重置媒體播放器 resetResources();

private void resetResources() { 
    resetMediaPlayer(); 
    resetViewResources(); 
} 

private void resetMediaPlayer() { 
    try { 
     if (mediaPlayer != null) { 
      if (mediaPlayer.isPlaying()) 
       mediaPlayer.stop(); 
      mediaPlayer.reset(); 
     } 
    } catch (Exception e) { 
     Logger.caughtException(e); 
    } 
} 

private void resetViewResources() { 
    if (oldPosition == -1) 
     return; 
    updateViewAtPosition(false, false); 
}