RecyclerView 的 child 的 child 的 Android OnClickListener

标签 android

我想要做的是为回收 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/

相关文章:

android - 多部分实体多图像不发送

iphone - Android 开发在任何方面都像 iPhone 那样受到限制吗?

android - Android 硬件支持的 keystore 中的公钥有多安全?

java - 如何在用户单击 SearchView 并打开键盘时隐藏 FAB?

android - Retrofit + SimpleXMLConverter 适用于 Lollipop,不适用于 Kitkat

android - 将文件保存在 Nexus 7 的外部存储器上并从 PC 检索

java - Flutter构建发布APK报NoSuchMethodException错误

android - 为什么 Android 原生 HTML5 日期选择器上的 Chrome 变得非常慢?

java - onClick 在对话框内的 ListView 中的 ImageView

java - Android错误异常: E/AndroidRuntime(15779): android. view.ViewRootImpl$CalledFromWrongThreadException: