Почему этот RecyclerView ItemClickSupport конструктор является одиночным? - PullRequest
0 голосов
/ 29 марта 2019

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, и он работает найти.

Но мне интересно, почему конструктор определяется как одноэлементный.

Является ли это той же причиной создания нового RecyclerViewAdapter для другого RecyclerView в том же классе?

Я прочиталКомментарий, который не рекомендуется использовать один адаптер для различных RecyclerView из-за принципа единой ответственности.

Спасибо за ответы!

1 Ответ

0 голосов
/ 29 марта 2019

Это не синглтон.

Проще говоря, Singleton - это класс, который ограничен только единственным экземпляром. Невозможно, чтобы был второй экземпляр этого класса, поэтому у синглетонов есть обычно называемый метод static getInstance().

Однако класс, о котором вы спрашиваете, ItemClickSupport - это не то же самое. В отличие от Синглтона, он может иметь много экземпляров самого себя. Метод addTo() просто гарантирует, что каждый RecyclerView обладает точно одним экземпляром ItemClickSupport.

Однако это не делает его Синглтоном, потому что, пока в ItemClickSupport#addTo() передается еще один RecyclerView, будет еще один экземпляр ItemClickSupport.

...