Почему конструктор этого RecyclerView ItemClickSupport является однотонным?

#android #android-recyclerview #adapter #onclicklistener

#Android #android-recyclerview #адаптер #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, и он работает find.

Но мне интересно, почему конструктор определен как синглтон.

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

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

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

Ответ №1:

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

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

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

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