【问题标题】:how to bind a RecyclerView item and its containing button clicked event together如何将 RecyclerView 项目及其包含的按钮单击事件绑定在一起
【发布时间】:2016-11-10 12:21:02
【问题描述】:

我有一个 recyclerView,它的项目包含一个按钮。当我单击按钮时,我想获得 recyclerview 项目的位置。这里的问题是,当按钮点击按钮点击事件被触发但neath下的recyclerview项目没有被点击时,点击事件不能通过顶部的按钮到recyclerview项目。 如何获得此点击事件或如何将它们绑定在一起?如果知道答案,请告诉我。

更新: 我在网上找不到任何类似的帖子。通常recyclerview 包含的按钮被注册到不同的OnclickedListener。就我而言,他们需要处理相同的侦听器,尤其是 recyclerview 处理它。但是按钮只是阻止了recyclerview的点击事件。这里是viewholder代码: `公共类 GridViewAdapter 扩展 RecyclerView.Adapter {

    private final LinkedList<Device> mValues;
    private final OnListFragmentInteractionListener mListener;
    private OnLongClickListener mOnLongClickListener = null;

    public GridViewAdapter(LinkedList<Device> items, OnListFragmentInteractionListener listener) {
        mValues = items;
        mListener = listener;
    }

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

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.mItem = mValues.get(position);
//        holder.mIconView.setImageResource(R.drawable.ic_switch);

        holder.mNameView.setText(holder.mItem.device_name());

        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (null != mListener) {
                    mListener.onDeviceClicked(holder.mItem);
                }
            }
        });
    }

    public void deleteByDeviceCode(int deviceCode) {
        for(int i=0;i<mValues.size();i++) {
            if (mValues.get(i).device_code() == deviceCode) {
                mValues.remove(i);
            }
        }
    }

    public void deleteByPosition(int pos) {
        mValues.remove(pos);
    }

    public int getDeviceCodeByPosition(int pos) {
        return mValues.get(pos).device_code();
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        public final View mView;
        public final Button mButton;
        public final TextView mNameView;
        public Device mItem;

        public ViewHolder(View view) {
            super(view);
            mView = view;
            mButton = (Button) view.findViewById(R.id.dev_button);
            mNameView = (TextView) view.findViewById(R.id.dev_lable);
        }

        @Override
        public String toString() {
            return super.toString() + " '" + mNameView.getText() + "'";
        }

    }
}`

【问题讨论】:

    标签: android button android-recyclerview click-through


    【解决方案1】:

    当创建视图持有者时,尝试传递他们所代表的元素的索引,甚至引用整个元素。现在,当您在视图持有者中收到点击事件时,您应该通过事件本身传递由该持有者/行表示的元素(索引)。

    【讨论】:

    • 问题是如果它包含一个按钮,视图持有者没有收到点击事件。按钮接收点击事件,recyclerview持有者没有。
    • ViewHolder 本身不能接收点击事件,只有views可以做到。保持对视图持有者内部按钮的引用,您应该在那里接收和处理点击事件。如果您希望整个项目接收点击,您可以通过使项目的根视图可点击来破解它,并将其附加在点击侦听器上,就像它是一个按钮一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多