Skip to content

Instantly share code, notes, and snippets.

@davinctor
Last active November 11, 2016 11:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davinctor/abbb2aae0ad518eef33ecbe6e0bfc853 to your computer and use it in GitHub Desktop.
Save davinctor/abbb2aae0ad518eef33ecbe6e0bfc853 to your computer and use it in GitHub Desktop.
How to listen clicks on recyclerViewAdapter elements
class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
private Context mContext;
private LayoutInflater mLayoutInflater;
private List<User> mUsers;
private OnUserClickListener mOnUserClickListener;
private final View.OnClickListener mOnItemClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag instanceof UserViewHolder) {
UserViewHolder holder = (UserViewHolder) tag;
mOnUserClickListener.onUserClicked(holder.getAdapterPosition());
}
}
};
private final View.OnClickListener mOnLikeClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag instanceof UserViewHolder) {
UserViewHolder holder = (UserViewHolder) tag;
mOnUserClickListener.onLikeClicked(holder.getAdapterPosition());
}
}
};
private final View.OnClickListener mOnReplyClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag instanceof UserViewHolder) {
UserViewHolder holder = (UserViewHolder) tag;
mOnUserClickListener.onReplyClicked(holder.getAdapterPosition());
}
}
};
public UsersAdapter(Context context, List<User> data, OnUserClickListener onUserClickListener) {
mContext = context;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mUsers = data;
mOnUserClickListener = onUserClickListener;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(000, null);
UserViewHolder userViewHolder = new UserViewHolder(view);
userViewHolder.itemView.setTag(userViewHolder);
userViewHolder.itemView.setOnClickListener(mOnItemClickListener);
userViewHolder.mButtonLike.setTag(userViewHolder);
userViewHolder.mButtonLike.setOnClickListener(mOnLikeClickListener);
userViewHolder.mButtonReply.setTag(userViewHolder);
userViewHolder.mButtonReply.setOnClickListener(mOnReplyClickListener);
return userViewHolder;
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.bind(mUsers.get(position));
}
@Override
public boolean onFailedToRecycleView(UserViewHolder holder) {
return true;
}
@Override
public int getItemCount() {
return mUsers.size();
}
interface OnUserClickListener {
void onUserClicked(int position);
void onLikeClicked(int position);
void onReplyClicked(int position);
// etc...
}
static final class UserViewHolder extends RecyclerView.ViewHolder {
private Button mButtonLike;
private Button mButtonReply;
public UserViewHolder(View itemView) {
super(itemView);
}
private void bind(User user) {
// bind logic
}
}
}
class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
private Context mContext;
private LayoutInflater mLayoutInflater;
private List<User> mUsers;
private OnUserClickListener mOnUserClickListener;
private final View.OnClickListener mOnItemClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag instanceof UserViewHolder) {
UserViewHolder holder = (UserViewHolder) tag;
mOnUserClickListener.onUserClicked(mUsers.get(holder.getAdapterPosition()));
}
}
};
private final View.OnClickListener mOnLikeClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag instanceof UserViewHolder) {
UserViewHolder holder = (UserViewHolder) tag;
mOnUserClickListener.onLikeClicked(mUsers.get(holder.getAdapterPosition()));
}
}
};
private final View.OnClickListener mOnReplyClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag instanceof UserViewHolder) {
UserViewHolder holder = (UserViewHolder) tag;
mOnUserClickListener.onReplyClicked(mUsers.get(holder.getAdapterPosition()));
}
}
};
public UsersAdapter(Context context, List<User> data, OnUserClickListener onUserClickListener) {
mContext = context;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mUsers = data;
mOnUserClickListener = onUserClickListener;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(000, null);
UserViewHolder userViewHolder = new UserViewHolder(view);
userViewHolder.itemView.setTag(userViewHolder);
userViewHolder.itemView.setOnClickListener(mOnItemClickListener);
userViewHolder.mButtonLike.setTag(userViewHolder);
userViewHolder.mButtonLike.setOnClickListener(mOnLikeClickListener);
userViewHolder.mButtonReply.setTag(userViewHolder);
userViewHolder.mButtonReply.setOnClickListener(mOnReplyClickListener);
return userViewHolder;
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.bind(mUsers.get(position));
}
@Override
public boolean onFailedToRecycleView(UserViewHolder holder) {
return true;
}
@Override
public int getItemCount() {
return mUsers.size();
}
interface OnUserClickListener {
void onUserClicked(User user);
void onLikeClicked(User user);
void onReplyClicked(User user);
// etc...
}
static final class UserViewHolder extends RecyclerView.ViewHolder {
private Button mButtonLike;
private Button mButtonReply;
public UserViewHolder(View itemView) {
super(itemView);
}
private void bind(User user) {
// bind logic
}
}
}
class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
private Context mContext;
private LayoutInflater mLayoutInflater;
private List<User> mUsers;
private OnUserClickListener mOnUserClickListener;
public UsersAdapter(Context context, List<User> data, OnUserClickListener onUserClickListener) {
mContext = context;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mUsers = data;
mOnUserClickListener = onUserClickListener;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(000, null);
return new UserViewHolder(view, mOnUserClickListener);
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.bind(mUsers.get(position));
}
@Override
public boolean onFailedToRecycleView(UserViewHolder holder) {
return true;
}
@Override
public int getItemCount() {
return mUsers.size();
}
interface OnUserClickListener {
void onUserClicked(int position);
void onLikeClicked(int position);
void onReplyClicked(int position);
// etc...
}
static final class UserViewHolder extends RecyclerView.ViewHolder {
private Button mButtonLike;
private Button mButtonReply;
public UserViewHolder(View itemView, final OnUserClickListener onUserClickListener) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserClickListener.onUserClicked(getAdapterPosition());
}
});
mButtonLike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserClickListener.onLikeClicked(getAdapterPosition());
}
});
mButtonReply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserClickListener.onReplyClicked(getAdapterPosition());
}
});
}
private void bind(User user) {
// bind logic
}
}
}
class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> implements UserProvider {
private Context mContext;
private LayoutInflater mLayoutInflater;
private List<User> mUsers;
private OnUserClickListener mOnUserClickListener;
public UsersAdapter(Context context, List<User> data, OnUserClickListener onUserClickListener) {
mContext = context;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mUsers = data;
mOnUserClickListener = onUserClickListener;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(000, null);
return new UserViewHolder(view, mOnUserClickListener, this);
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.bind(mUsers.get(position));
}
@Override
public boolean onFailedToRecycleView(UserViewHolder holder) {
return true;
}
@Override
public int getItemCount() {
return mUsers.size();
}
@Nullable
@Override
public User provideUser(int position) {
return mUsers.get(position);
}
interface OnUserClickListener {
void onUserClicked(User user);
void onLikeClicked(User user);
void onReplyClicked(User user);
// etc...
}
static final class UserViewHolder extends RecyclerView.ViewHolder {
private Button mButtonLike;
private Button mButtonReply;
public UserViewHolder(View itemView, final OnUserClickListener onUserClickListener, final UserProvider userProvider) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserClickListener.onUserClicked(userProvider.provideUser(getAdapterPosition()));
}
});
mButtonLike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserClickListener.onLikeClicked(userProvider.provideUser(getAdapterPosition()));
}
});
mButtonReply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onUserClickListener.onReplyClicked(userProvider.provideUser(getAdapterPosition()));
}
});
}
private void bind(User user) {
// bind logic
}
}
}
interface UserProvider {
@Nullable
User provideUser(int position);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment