package com.simplecity.amp_library.ui.modelviews; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.simplecity.amp_library.R; import com.simplecity.amp_library.model.AdaptableItem; import com.simplecity.amp_library.ui.adapters.ItemAdapter; import com.simplecity.amp_library.ui.recyclerview.CustomSwappingHolder; import com.simplecity.amp_library.utils.ThemeUtils; import java.util.List; public class HorizontalRecyclerView extends BaseAdaptableItem<Object, HorizontalRecyclerView.ViewHolder> { public HorizontalAdapter itemAdapter; public HorizontalRecyclerView() { this.itemAdapter = new HorizontalAdapter(); } public void setItems(List<AdaptableItem> items) { itemAdapter.setItems(items); } public void setListener(HorizontalAdapter.ItemListener listener) { itemAdapter.setListener(listener); } public int getCount() { return itemAdapter.getItemCount(); } @Override public int getViewType() { return ViewType.HORIZONTAL_RECYCLERVIEW; } @Override public int getLayoutResId() { return R.layout.recycler_header; } @Override public void bindView(ViewHolder holder) { ((RecyclerView) holder.itemView).setAdapter(itemAdapter); } @Override public ViewHolder getViewHolder(ViewGroup parent) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(getLayoutResId(), parent, false)); } public static class ViewHolder extends CustomSwappingHolder { public ViewHolder(View itemView) { super(itemView); LinearLayoutManager layoutManager = new LinearLayoutManager(itemView.getContext(), LinearLayoutManager.HORIZONTAL, false); //Todo: Reinstate when updating support lib // layoutManager.setInitialPrefetchItemCount(4); ((RecyclerView) itemView).setLayoutManager(layoutManager); //noinspection RedundantCast ((RecyclerView) itemView).setNestedScrollingEnabled(false); ThemeUtils.themeRecyclerView(((RecyclerView) itemView)); ((RecyclerView) itemView).addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { ThemeUtils.themeRecyclerView(recyclerView); super.onScrollStateChanged(recyclerView, newState); } }); } @Override public String toString() { return "HorizontalRecyclerView.ViewHolder"; } } public static class HorizontalAdapter extends ItemAdapter { public interface ItemListener { void onItemClick(ItemAdapter adapter, View v, int position, Object item); void onOverflowClick(View v, int position, Object item); } private ItemListener listener; public void setListener(ItemListener listener) { this.listener = listener; } public Object getItem(int position) { return (items.get(position)).getItem(); } @Override protected void attachListeners(RecyclerView.ViewHolder viewHolder) { super.attachListeners(viewHolder); viewHolder.itemView.setOnClickListener(v -> { if (listener != null && viewHolder.getAdapterPosition() != -1) { listener.onItemClick(this, v, viewHolder.getAdapterPosition(), getItem(viewHolder.getAdapterPosition())); } }); ((MultiItemView.ViewHolder) viewHolder).overflowButton.setOnClickListener(v -> { if (listener != null && viewHolder.getAdapterPosition() != -1) { listener.onOverflowClick(v, viewHolder.getAdapterPosition(), getItem(viewHolder.getAdapterPosition())); } }); } } }