1

progressBar.setProgress()progressBar.setMax()の問題が発生しました。RecyclerViewアダプタでProgressBarがリフレッシュされない

私は2つのアイテムを持っており、一般的には添付のスクリーンショットのようにビデオの進行状況を表示する必要があります。最初の項目についてのみ、進捗状況を設定した後に進捗データを持っています。進捗状況を2番目の項目に0(ゼロ)に設定する必要があります。しかし、2番目の項目ProgressBarは、最初の項目の進行長を表示しているのではなく、0に戻されません。

私はここの項目の値を印刷:

// Item1 
Media List total Duration : 84063 
Media List total ProgressDuration : 19380 
// Item2 
Media List total Duration : 0 
Media List total ProgressDuration : 0 

アダプターコード:

class ViewHolder extends RecyclerView.ViewHolder { 
    TextView fileName; 
    ImageView ivThumbNail; 
    ProgressBar progressBar; 
    View mainContainer; 
    View view; 

    ViewHolder(View itemView) { 
     super(itemView); 
     view = itemView; 
     mainContainer = itemView.findViewById(R.id.main_container); 
     fileName = (TextView) itemView.findViewById(R.id.tv_file_name); 
     ivThumbNail = (ImageView) itemView.findViewById(R.id.iv_thumbnail); 
     progressBar = (ProgressBar) itemView.findViewById(R.id.progress_bar); 
    } 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(context).inflate(R.layout.media_row, parent, false); 
    return new ViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    final Media media = mediaList.get(position); 

    String videoUrl = media.video_url; 

    int totalDuration = VideoPositionVo.getTotalDuration(context, videoUrl, media.course_id); 
    int progressDuration = VideoPositionVo.getResumedPosition(context, videoUrl, media.course_id); 

    Log.d("Media List total Duration : " , totalDuration); 
    Log.d("Media List total ProgressDuration : " , progressDuration); 

    holder.progressBar.invalidate(); 
    holder.progressBar.setMax(totalDuration); 
    holder.progressBar.setProgress(progressDuration); 


    String sampleThumbNail = "https://i.vimeocdn.com/video/23566238_100x75.webp"; 
    aQuery.id(holder.ivThumbNail).image(sampleThumbNail, true, true, imageWidth, 0); 
    holder.fileName.setText(media.video_label); 

} 

アダプタ行のxml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:elevation="4dp" 
    android:foreground="?android:attr/selectableItemBackground" 
    android:orientation="vertical" 
    android:paddingBottom="4dp" 
    android:paddingEnd="4dp" 
    app:cardCornerRadius="2dp" 
    app:cardElevation="2sp" 
    app:cardUseCompatPadding="true"> 


    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/iv_thumbnail" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clickable="false" 
      android:scaleType="centerCrop" 
      android:contentDescription="@string/media" 
      android:visibility="visible" /> 

     <RelativeLayout 
      android:id="@+id/main_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/black_transparent_dark"> 

      <ImageView 
       android:id="@+id/iv_file_type" 
       android:layout_width="76dp" 
       android:layout_height="76dp" 
       android:layout_centerInParent="true" 
       android:contentDescription="@string/media" 
       android:scaleType="centerCrop" 
       android:src="@drawable/ic_play" /> 

      <TextView 
       android:id="@+id/tv_file_name" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_margin="5dp" 
       android:layout_above="@+id/progress_bar" 
       android:ellipsize="end" 
       android:gravity="center" 
       android:maxLines="2" 
       android:text="fileName" 
       android:textColor="@color/white" 
       android:textStyle="bold" /> 


      <ProgressBar 
       android:id="@+id/progress_bar" 
       style="@android:style/Widget.ProgressBar.Horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="6dp" 
       android:indeterminate="false" 
       android:layout_alignParentBottom="true" 
       android:max="0" 
       android:progress="0" 
       android:progressDrawable="@drawable/video_progress_bar" 
       android:visibility="visible" /> 
     </RelativeLayout> 

    </RelativeLayout> 

</android.support.v7.widget.CardView> 

スクリーンショット:

enter image description here

+0

['adapter.notifyDataSetChanged()'](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyDataSetChanged())を呼び出していますか? – azizbekian

+0

最初の項目自体に有効なデータが含まれているため、notifyDataSetChangedを呼び出す必要はありません。最初の項目には進捗値が含まれ、2番目の項目には進捗値が0として格納されます。 –

+1

'onBindViewHolder()'では 'holder.progressBar.getProgressDrawable()。mutate '。 – azizbekian

答えて

3

onBindViewHolder()holder.progressBar.getProgressDrawable().mutate()を実行します。

+0

ちょっとアジズベキアン私は24時間後に私の賞金を授与します。 –

関連する問題