在Activity中定义RecyclerView的onCLickListener

Abh*_*oni 14 android android-recyclerview

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

如果通过在ViewHolder中定义onClickListener,单击项目后幕后不会发生很多事情,则可以解决此问题.

如果文本或其他任何必须传递给下一个Activity的内容在ViewHolder有权访问的视图中确实存在,但它是具有RecyclerView的Activity的一部分呢?

在这种情况下,必须在活动内部实现onClickListener,以便可以转发文本.有可能的.

  1. 一种方法是添加一个隐藏视图的Invisible View,然后执行之前已经完成的操作; 在适配器中实现onClickListener.

  2. 不知何故,将该文本传递给适配器.

怎么能"2" 实施?

pRa*_*NaY 22

请参阅下面的示例来创建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);
            }
        });
    }
}
}
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅将单击侦听器设置为RecyclerView

希望它能帮助你.

  • 这可能是最简单的方法了。 (2认同)

Adn*_*jad 15

在您的活动中写一个公共函数,例如:

public void onClickCalled(String anyValue) {
    // Call another acitivty here and pass some arguments to it.
}
Run Code Online (Sandbox Code Playgroud)

现在在适配器的onClick函数中

@Override
public void onClick(View view) {
    ((YouActivityClass) context).onClickCalled("your argument here");
}
Run Code Online (Sandbox Code Playgroud)