为什么这个RecyclerView ItemClickSupport的构造函数是单调的?

时间:2019-03-29 03:35:34

标签: android android-recyclerview adapter onclicklistener

https://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/

    private ItemClickSupport(RecyclerView recyclerView) {
        mRecyclerView = recyclerView;
        mRecyclerView.setTag(R.id.item_click_support, this);
        mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
    }


    public static ItemClickSupport addTo(RecyclerView view) {
        ItemClickSupport support = (ItemClickSupport) 
        view.getTag(R.id.item_click_support);
        if (support == null) {
            support = new ItemClickSupport(view);
        }
        return support;
    }

我很高兴找到支持RecyclerView Click的源代码,并且可以正常工作。

但是我不知道为什么将构造函数定义为单例。

与同一类中的另一个RecyclerView创建新的RecyclerViewAdapter的原因相同吗?

我读到一条评论,由于单一责任原则,不建议将其用作各种RecyclerView的适配器。

感谢答案!

1 个答案:

答案 0 :(得分:0)

那不是单身汉。

简单来说,“单例”是仅限于单个实例的类。该类的第二个实例是不可能的,这就是为什么Singletons具有通用名称的static getInstance()方法的原因。

但是,您要询问的课程ItemClickSupport是不同的。与Singleton不同,它可以具有许多实例。 addTo()方法只是确保每个RecyclerView都拥有ItemClickSupport一个实例。

但是,这并不能使它成为Singleton,因为只要将另一个RecyclerView传递到ItemClickSupport#addTo()中,就会有ItemClickSupport的另一个实例。