Giter VIP home page Giter VIP logo

Comments (12)

kaleai avatar kaleai commented on June 2, 2024

这个描述不太清楚,可以提交详细的描述或者代码么?

from commonadapter.

longlyboyhe avatar longlyboyhe commented on June 2, 2024

就是使用这个adapter时,如果存在整个item的点击事件时,里面的按钮点击的时候,既会触发按钮的点击事件,也会触发整个item的点击事件。

from commonadapter.

kaleai avatar kaleai commented on June 2, 2024

整个item的点击事件你是怎么捕获的呢?我不记得有这个功能

from commonadapter.

kaleai avatar kaleai commented on June 2, 2024

你把点击事件都放在item里面,不要对recyclerview 进行点击的监听,这样的写法就不会出现这样的情况了。我感觉你是做了两套监听方案,所以出现了多次触发的情况。

from commonadapter.

longlyboyhe avatar longlyboyhe commented on June 2, 2024

item里面只是做单个View的点击时间,应该在你写的setView()中进行,
/**
* @tips: 优化小技巧:在这里直接设置按钮的监听器。
* 因为这个方法仅仅在item建立时才调用,所以不会重复建立监听器。
*/

@Override
    public void setViews() {
        // 这个方法仅仅在item构建时才会触发,所以在这里也仅仅建立一次监听器,不会重复建立
        mOrderQueren.setOnClickListener(v->outOrder(v));
    }

我对CommonRcvAdapter做了一点修改,这样就可以在外面使用了,onCreateViewHolder()中添加了一下监听事件。

 @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        RcvAdapterItem viewHolder = new RcvAdapterItem(parent.getContext(), parent, createItem(mType));
        setListener(parent, viewHolder, viewType);
        return viewHolder;
    }

 protected void setListener(final ViewGroup parent, final RcvAdapterItem viewHolder, int viewType)
    {
        viewHolder.itemView.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if (mOnItemClickListener != null)
                {
                    int position = viewHolder.getAdapterPosition();
                    mOnItemClickListener.onItemClick(parent, v,position);
                }
            }
        });


        viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener()
        {
            @Override
            public boolean onLongClick(View v)
            {
                if (mOnItemClickListener != null)
                {
                    int position = viewHolder.getAdapterPosition();
                    return mOnItemClickListener.onItemLongClick(parent, v, position);
                }
                return false;
            }
        });
    }

这样就可以通过接口OnItemClickListener把点击事件传递出来,在Activity中实现这个接口就可以了。

mAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(ViewGroup parent, View view, int position) {
                position = position - wrapper.getHeaderCount();
                if (position >= 0) {
                    //处理点击操作

                }
            }

            @Override
            public boolean onItemLongClick(ViewGroup parent, View view, int position) {
                return false;
            }
        });

from commonadapter.

kaleai avatar kaleai commented on June 2, 2024

既然你做了这样的监听修改,那么自然会出现这样的情况了。我是不期望在外面做监听的,这样代码的聚合度和维护成本会提升。

from commonadapter.

longlyboyhe avatar longlyboyhe commented on June 2, 2024

开始时没有这样做,按照您提供的实例做的

 recyclerView.addOnItemTouchListener(new RcvOnItemClickListener(this, new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                position = position - wrapper.getHeaderCount();
                if (position >= 0) {
                    data.remove(position);
                }
            }
        }));

但是这样每次都会调用到,包括item控件内部的View,所以我就稍微做了一下修改,放到Adaapter中做了监听。

from commonadapter.

kaleai avatar kaleai commented on June 2, 2024

这样吧,咱们可以探讨一下。我的qq [email protected]

from commonadapter.

DreamMemory001 avatar DreamMemory001 commented on June 2, 2024

ItemView中的子View进行监听.这个是否在adapter中不同于OnItemClickListener的接口?

from commonadapter.

kaleai avatar kaleai commented on June 2, 2024

是的,并不希望提供OnItemClickListener @DreamMemory001 adapter本身是一个数据和试图绑定器,提供这样的事件监听十分奇怪

from commonadapter.

DreamMemory001 avatar DreamMemory001 commented on June 2, 2024

那Recyclerview是否有一个可以设置到activity上的点击事件的接口呢,这个接口不是item的,而是别的view的,请问,有吗?

from commonadapter.

kaleai avatar kaleai commented on June 2, 2024

https://github.com/tianzhijiexian/CommonAdapter/blob/2e649132ea49ffb9e0de080578eda7840d3587d9/app/src/main/java/kale/commonadapter/util/OnItemClickListener.java

@DreamMemory001

from commonadapter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.