我想要做的是为回收 View 中的项目中的 ImageView 设置一个 onClickListener。我只想单击该 ImageView 执行代码 A,然后单击其他任何地方运行代码 B。我该怎么做?我正在使用:
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());
}
}
}
}
用于我的适配器和 View 支架。
最佳答案
好吧,这可能不是正确的方法,但这就是我让它工作的方式。
首先在你的ViewHolder中创建一个点击界面:
private TaskListRecyclerviewClickInterface clickListener;
...
this.clickListener = clickListener;
...
public interface TaskListRecyclerviewClickInterface {
public void onItemClicked(int position, String tag);
}
然后在你想要的 View 上添加一个onclicklistener,当这些item被点击时调用这个接口(interface),如下所示:
holder_view.setTag("holder");
holder_view.setOnClickListener(this);
imageView.setTag("ImageView");
imageView.setOnclickListener(this);
还有 onClickListener :
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.onItemClicked(getPosition(), v.getTag().toString());
}
}
现在从您的 Activity 中,将此接口(interface)传递给构造函数中的适配器,然后将接口(interface)传递给此查看器,如下所示:
public InboxTaskListAdapter(List<Items> items, InboxTasksViewHolder.TaskListRecyclerviewClickInterface clickListener) {
this.items = items;
this.clickListener = clickListener;
}
在 onCreateViewHolder 中,您应该将接口(interface)传递给 viewholder。
现在在您的 Activity 或 fragment 中只需实现此监听器并覆盖 onItemClicked 方法。您现在将获得点击的 View 位置和标签。
关于RecyclerView 的 child 的 child 的 Android OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31174712/