package cl.monsoon.s1next.view.adapter.delegate; import android.app.Activity; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.hannesdorfmann.adapterdelegates.AbsAdapterDelegate; import java.util.List; import cl.monsoon.s1next.R; import cl.monsoon.s1next.view.adapter.item.ProgressItem; public final class ProgressAdapterDelegate extends AbsAdapterDelegate<List<Object>> { private final LayoutInflater mLayoutInflater; public ProgressAdapterDelegate(Activity activity, int viewType) { super(viewType); mLayoutInflater = activity.getLayoutInflater(); } @Override public boolean isForViewType(@NonNull List<Object> items, int position) { return items.get(position) instanceof ProgressItem; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent) { return new ProgressViewHolder(mLayoutInflater.inflate(R.layout.item_progress, parent, false)); } @Override public void onBindViewHolder(@NonNull List<Object> items, int position, @NonNull RecyclerView.ViewHolder holder) { // match_parent doesn't work for RecyclerView's item ProgressViewHolder progressViewHolder = (ProgressViewHolder) holder; progressViewHolder.progressBar.setVisibility(View.GONE); progressViewHolder.itemView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { v.removeOnLayoutChangeListener(this); ViewGroup.LayoutParams layoutParams = progressViewHolder.itemView.getLayoutParams(); View view = (View) progressViewHolder.itemView.getParent(); layoutParams.height = view.getHeight() - view.getPaddingTop() - view.getPaddingBottom(); progressViewHolder.progressBar.setVisibility(View.VISIBLE); } }); } private static final class ProgressViewHolder extends RecyclerView.ViewHolder { private final View progressBar; public ProgressViewHolder(View itemView) { super(itemView); progressBar = itemView.findViewById(R.id.progress_bar); } } }