package ua.kpi.ecampus.ui.adapter; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.PopupMenu; import android.widget.TextView; import ua.kpi.ecampus.model.pojo.Bulletin; import ua.kpi.ecampus.ui.view.OnItemClickListener; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; /** * Manages Bulletin data model and adapts it to RecyclerView, which is in * BulletinBoardActivity, BulletinBoardModeratorActivity.. * <p> * Created by Administrator on 24.03.2016. */ public class PagingRecyclerAdapter extends RecyclerView .Adapter<PagingRecyclerAdapter.ViewHolder> { private List<Bulletin> mData = new ArrayList<>(); private OnItemClickListener mListener; private PopupMenu.OnMenuItemClickListener mMenuListener; private boolean mIsModerator = false; // after reorientation test this member // or one extra request will be sent after each reorientation private boolean mAllItemsLoaded; private Bulletin mClickedItem; public PagingRecyclerAdapter(boolean isModerator) { mIsModerator = isModerator; } public void addNewItems(List<Bulletin> items) { if (items.size() == 0) { mAllItemsLoaded = true; return; } mData.addAll(items); notifyItemInserted(getItemCount() - items.size()); } public void setItems(List<Bulletin> list) { mData = list; notifyDataSetChanged(); } public List<Bulletin> getItems() { return mData; } public boolean isAllItemsLoaded() { return mAllItemsLoaded; } @Override public long getItemId(int position) { return Long.valueOf(getItem(position).getId()); } public Bulletin getItem(int position) { return mData.get(position); } public Bulletin getLastItem() { return mData.get(getItemCount() - 1); } @Override public int getItemCount() { return mData.size(); } @Override public PagingRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(ua.kpi .ecampus.R.layout .recycler_item_bulletin, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(PagingRecyclerAdapter.ViewHolder holder, int position) { Bulletin bul = mData.get(position); holder.date.setText(bul.getDateCreate()); holder.theme.setText(bul.getSubject()); holder.author.setText(bul.getCreatorName()); if (mIsModerator) { holder.btnOverflow.setVisibility(View.VISIBLE); } } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } public void setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener) { mMenuListener = listener; } public Bulletin getClickedItem() { return mClickedItem; } public void setFilter(List<Bulletin> bulletins) { mData.clear(); mData.addAll(bulletins); notifyDataSetChanged(); } protected class ViewHolder extends RecyclerView.ViewHolder { @Bind(ua.kpi.ecampus.R.id.text_view_bulletin_date) TextView date; @Bind(ua.kpi.ecampus.R.id.text_view_bulletin_theme) TextView theme; @Bind(ua.kpi.ecampus.R.id.text_view_bulletin_author) TextView author; @Bind(ua.kpi.ecampus.R.id.button_overflow) ImageButton btnOverflow; public ViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } @OnClick(ua.kpi.ecampus.R.id.layout_bulletin) public void itemClick(View view) { if (mListener != null) { int pos = getAdapterPosition(); mListener.onItemClicked(view, pos, mData.get(pos)); } } @OnClick(ua.kpi.ecampus.R.id.button_overflow) public void btnOverflowClick(final View view) { int pos = getAdapterPosition(); mClickedItem = mData.get(pos); PopupMenu menu = new PopupMenu(view.getContext(), view); menu.inflate(ua.kpi.ecampus.R.menu.menu_popup_bulletin); menu.show(); menu.setOnMenuItemClickListener(mMenuListener); } } }