#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
.