Android的OnClickListener的RecyclerView的孩子的孩子 [英] Android OnClickListener for RecyclerView's Child's Child
问题描述
我想要做的是设置一个onClickListener一个ImageView的是在一个recyclerview一个项目是什么。我只想上的ImageView点击做code A并单击其他任何地方运行code B.我怎么能这样做?我使用的:
What I want to do is set an onClickListener for an ImageView that is in an item in a recyclerview. I only want a click on that ImageView to do CODE A and click anywhere else to run CODE B. How can I do that? I am using:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
LayoutInflater inflater;
Context context;
ClickListener clickListener;
List<PostContent> posts = Collections.emptyList();
public RecyclerAdapter(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
}
public void setPosts(List<PostContent> posts) {
this.posts = posts;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = inflater.inflate(R.layout.post_row, viewGroup, false);
RecyclerViewHolder viewHolder = new RecyclerViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerViewHolder viewHolder, int i) {
viewHolder.name.setText(posts.get(i).name);
viewHolder.username.setText("@" + posts.get(i).username);
viewHolder.time_post.setText(posts.get(i).time_post);
viewHolder.content.setText(posts.get(i).content);
}
@Override
public int getItemCount() {
return posts.size();
}
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
public interface ClickListener {
public void ItemClicked(View view, int pos);
}
public class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView name;
TextView username;
TextView time_post;
TextView content;
ImageView profile;
public RecyclerViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
username = (TextView) itemView.findViewById(R.id.username);
time_post = (TextView) itemView.findViewById(R.id.time);
content = (TextView) itemView.findViewById(R.id.content);
profile = (ImageView) itemView.findViewById(R.id.profile);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.ItemClicked(v, getPosition());
}
}
}
} 我的适配器和观点持有者。
} for my adapter and view holder.
推荐答案
好了,所以这可能不是做了正确的方法,但是这是我得到了它的工作。
Okay so this might not be the correct way to do it, but this is how I got it to work.
首先,在你的ViewHolder创建一个点击式界面:
Firstly create a click interface in your ViewHolder:
private TaskListRecyclerviewClickInterface clickListener;
...
this.clickListener = clickListener;
...
public interface TaskListRecyclerviewClickInterface {
public void onItemClicked(int position, String tag);
}
然后,一个onclicklistener添加到您想要的意见,并调用该接口时,这些项目被点击像这样:
Then add an onclicklistener to the views you want and call this interface when these items are clicked like so:
holder_view.setTag("holder");
holder_view.setOnClickListener(this);
imageView.setTag("ImageView");
imageView.setOnclickListener(this);
而onClickListener:
And the onClickListener :
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.onItemClicked(getPosition(), v.getTag().toString());
}
}
这是你的活动现在,通过这个接口适配器在构造函数中,然后将接口传递给这个viewholder像这样:
Now from your activity, pass this Interface to your Adapter in the constructor and then pass the interface to this viewholder like so:
public InboxTaskListAdapter(List<Items> items, InboxTasksViewHolder.TaskListRecyclerviewClickInterface clickListener) {
this.items = items;
this.clickListener = clickListener;
}
在onCreateViewHolder你应该通过接口viewholder。
In onCreateViewHolder you should pass the interface to the viewholder.
现在在你的活动或片段只是实现这个监听器并覆盖onItemClicked方法。现在,您将获取视图位置,标签被点击。
Now in your Activity or fragment just implement this listener and override the onItemClicked method. You will now get the view position and tag that was clicked on.
这篇关于Android的OnClickListener的RecyclerView的孩子的孩子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!