Last active
December 10, 2017 02:02
-
-
Save afiqiqmal/715461a9194475cedb54a632d9b4938f to your computer and use it in GitHub Desktop.
Recyclerview Android Single Choice with Callback
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface ItemClickCallback<Item> { | |
public void onItemClick(Item item); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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