Skip to content

Instantly share code, notes, and snippets.

@afiqiqmal
Last active December 10, 2017 02:02
Show Gist options
  • Save afiqiqmal/715461a9194475cedb54a632d9b4938f to your computer and use it in GitHub Desktop.
Save afiqiqmal/715461a9194475cedb54a632d9b4938f to your computer and use it in GitHub Desktop.
Recyclerview Android Single Choice with Callback
public interface ItemClickCallback<Item> {
public void onItemClick(Item item);
}
private void setupRecyclerView() {
leaveTypeAdapter = new SampleAdapter(getContext(), Data.getLeaveType(getContext()));
leave_recyclerView.setAdapter(leaveTypeAdapter);
leaveTypeAdapter.notifyDataSetChanged();
leaveTypeAdapter.setItemClickCallback(this);
}
@Override
public void onItemClick(Object o) {
if (o instanceof LeaveType) {
// your code
}
}
public class SampleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Model> items;
private Context mContext;
private int type;
private int lastCheckedPosition = 0;
private ItemClickCallback itemClickCallback;
public SampleAdapter(Context mContext, List<Model> list) {
items = list;
this.mContext = mContext;
this.type = type;
}
public void setItemClickCallback(ItemClickCallback itemClickCallback) {
this.itemClickCallback = itemClickCallback;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_leave_type, parent, false);
return new ViewHolderLeaveType(view);
}
@SuppressWarnings("unchecked")
class ViewHolderLeaveType extends RecyclerView.ViewHolder {
@BindView(R.id.item_image)
ImageView itemImage;
@BindView(R.id.item_text)
TextView itemText;
@BindView(R.id.item_type)
LinearLayout itemType;
ViewHolderLeaveType(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
itemType.setOnClickListener(view -> {
lastCheckedPosition = getAdapterPosition();
notifyDataSetChanged();
if (itemClickCallback != null) {
itemClickCallback.onItemClick(items.get(lastCheckedPosition));
}
});
}
}
@SuppressLint("DefaultLocale")
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolderLeaveType vHolder = (ViewHolderLeaveType)holder;
Model leaveType = items.get(position);
vHolder.itemText.setText(leaveType.getName());
leaveType.setSelected(position == lastCheckedPosition);
}
@Override
public int getItemCount() {
return items != null ? items.size() : 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment