package com.zulip.android.viewholders.stickyheaders; import android.support.design.widget.CoordinatorLayout; import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; import com.zulip.android.ZulipApp; public class RetrieveHeaderView { public static int DEFAULT_VIEW_TYPE = -1; private final RecyclerView recyclerView; private RecyclerView.ViewHolder currentViewHolder; private int currentViewType; RetrieveHeaderView(RecyclerView recyclerView) { this.recyclerView = recyclerView; this.currentViewType = DEFAULT_VIEW_TYPE; } RecyclerView.ViewHolder getViewHolderForPosition(int position) { if (currentViewType != recyclerView.getAdapter().getItemViewType(position)) { currentViewType = recyclerView.getAdapter().getItemViewType(position); currentViewHolder = recyclerView.getAdapter().createViewHolder( (ViewGroup) recyclerView.getParent(), currentViewType); } //set top margin for sticky header to 0 as in message_header.xml it is present which is only required when header is in between of messages CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) currentViewHolder.itemView.getLayoutParams(); layoutParams.setMargins(0, ZulipApp.get().getZulipActivity().getFloatingHeaderTopMargin(), 0, 0); //set viewHolder in ZulipActivity //adjust it when message list get scrolled ZulipApp.get().getZulipActivity().setViewHolder(currentViewHolder); return currentViewHolder; } }