gpt4 book ai didi

android - 在 Activity 中定义 RecyclerView 的 onCLickListener

转载 作者:可可西里 更新时间:2023-11-01 19:09:43 24 4
gpt4 key购买 nike

RecyclerView 与 ListView 不同,因为它不提供 onItemCLickListener 类来处理点击事件。

如果单击项目时幕后没有发生太多事情,可以通过在 ViewHolder 中定义 onClickListener 来解决此问题。

如果必须传递给下一个 Activity 的文本或其他内容实际上并不存在于 ViewHolder 可以访问的 View 中,而是属于具有 RecyclerView 的 Activity 的一部分,该怎么办?

在这种情况下,必须在 Activity 内部实现 onClickListener,以便转发文本。这是可能的。

  1. 一种方法是添加一个包含该文本的不可见 View ,然后执行之前已完成的操作;在适配器中实现 onClickListener。

  2. 以某种方式将该文本传递给适配器。

怎么可能“2”。实现?

最佳答案

请参阅下面的示例以创建 RecyclerView OnClick

示例代码:

public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> {

public interface OnItemClickListener {
void onItemClick(ContentItem item);
}

private final List<ContentItem> items;
private final OnItemClickListener listener;

public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) {
this.items = items;
this.listener = listener;
}

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false);
return new ViewHolder(v);
}

@Override public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(items.get(position), listener);
}

@Override public int getItemCount() {
return items.size();
}

static class ViewHolder extends RecyclerView.ViewHolder {

private TextView name;
private ImageView image;

public ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
}

public void bind(final ContentItem item, final OnItemClickListener listener) {
name.setText(item.name);
Picasso.with(itemView.getContext()).load(item.imageUrl).into(image);
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
}

并使用 RecyclerView 适配器使用以下代码:

recycler.setAdapter(new ContentAdapter(items, new ContentAdapter.OnItemClickListener() {
@Override public void onItemClick(ContentItem item) {
Toast.makeText(getContext(), "Item Clicked", Toast.LENGTH_LONG).show();
}
}));

参见 Set a click listener to a RecyclerView

希望对你有帮助。

关于android - 在 Activity 中定义 RecyclerView 的 onCLickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com