Я начал использовать ViewBinding. После поиска некоторых примеров или советов, как использовать ViewBinding с абстрактным базовым классом, который должен обрабатывать одинаковые logi c для представлений, которые, как ожидается, будут присутствовать в каждом дочернем макете, я решил опубликовать этот вопрос здесь.
Сценарий:
У меня базовый класс public abstract class BaseFragment
. Есть несколько фрагментов, расширяющих этот базовый класс. Эти фрагменты имеют общие представления, которые обрабатываются из реализации базового класса (со «старым» findViewById()
). Например, ожидается, что макет каждого фрагмента будет содержать TextView с идентификатором text_title. Вот как это обрабатывается из BaseFragment
onViewCreated()
:
TextView title = view.findViewById(R.id.text_title);
// Do something with the view from the base class
Теперь ViewBinding-API генерирует классы привязки для каждого дочернего фрагмента. Я могу ссылаться на представления, используя привязку. Но я не могу использовать конкретные привязки из базового класса. Даже с введением дженериков в базовый класс существует слишком много типов привязок фрагментов, от которых я пока отказался от этого решения.
Какой рекомендуемый способ обработки представлений привязки из абстрактного базового класса? Есть ли лучшие практики? Не нашел встроенного механизма в API для элегантной обработки этого сценария.
Когда ожидается, что дочерние фрагменты будут содержать общие представления, я мог бы предоставить абстрактные методы, которые возвращают представления из конкретные привязки фрагментов и сделать их доступными из базового класса. (Например, protected abstract TextView getTitleView();
). Но разве это преимущество перед использованием findViewById()
? Что вы думаете? Какие-нибудь другие (лучшие) решения? Давайте начнем обсуждение.