Не RecyclerView.ViewHolder всегда должен быть внутренним классом?

у меня есть два RecyclerView.Adapters, которые используют точно такие же RecyclerView.ViewHolderS как внутренние классы.

Я хотел избавиться от дублирования кода и сделал эти ViewHolders свободный, отдельный класс, поэтому новый класс теперь может использоваться любым RecyclerView.Adapters.

однако я столкнулся с множеством проблем, например, с трудностями доступа к объектам адаптера. getAdapterPosition() всегда возвращает -1.

поэтому я передумал и сделал супер RecyclerView.Adapter класс, который расширяется теми адаптеры и поместите ViewHolder в суперкласс, чтобы эти адаптеры могли использовать его из подкласса.

но я хочу знать, если ViewHolder должен быть внутренний класс. Это меня раздражает. Пожалуйста, не советуйте мне объединять классы адаптеров, они совершенно разные, как ViewHolder всего в специальный viewType что можно появиться в любом RecyclerView

Я жду ваших лучших подходов, которые заставляют меня чувствовать себя лучше.

С уважением.

3 ответов


ViewHolder может быть вне класса. Внутренний класс - это только предложение во всех учебниках для RecyclerView, это лучший способ, если ваш ViewHolder должен иметь доступ ко всем параметрам адаптера, даже к тем частным, но любые отношения доступа или объектов могут быть воссозданы методами доступа в адаптере и ViewHolder.

Я создал автономный проект с использованием ViewHolder в качестве внешнего класса, посмотри. Ссылка на репозиторий - https://github.com/maciejsikora/outsideviewholder.

Я также думаю, что причиной вашей проблемы является тот факт, что в первой версии код ViewHolder был внутренним классом и имел доступ к свойствам, после изменения в внешнего класса, код должен был переработан, и в результате все отношения между ViewHolder и адаптер должны быть серьезно проверены.

ответ на вопрос - ViewHolder не должен быть внутренним классом, и ваш проблемы вызваны недопустимой реализацией кода при использовании ViewHolder в качестве внешнего класса.


на самом деле нет.

сначала вам нужно понять, почему нам нужен внутренний класс?

нам нужны внутренние классы, где мы хотим, чтобы только конкретный класс имел эту функциональность.Как будто у нас много внутреннего класса для многих Listeners и Button onclick и многое другое.

поэтому мы используем внутренний класс сделать вещи частными, короткими и простыми .

вы можете сделать эту вещь(ViewHolder) отдельный класс.Но это будет не будет эффективным, понятным (если вы сделаете другой класс,он добавит дополнительный класс в ваш проект) и эффективным способом.


Я всегда использовал его как внутренний. Я понимаю вашу проблему, и я тоже некоторое время занимался ею, и я думаю, что этот пост имеет ответ на нее. У парня из этого ответа тоже были проблемы с адаптерами.

регистрация здесь : https://stackoverflow.com/a/29719632/6634292

ваш вопрос интересный вопрос;)