Это эквивалентно вызову getActivity (). FindViewById вместо.findViewById во фрагменте? - PullRequest
0 голосов
/ 03 марта 2019

В методе onCreateView моего фрагмента я использовал для хранения завышенного макета переменную и затем передавал ее другим моим функциям, которые вызывали findViewById для этого раздутого View.

. Теперь,Я предпочитаю просто вернуть раздутый макет (я его не храню).Таким образом, я не передаю никакого значения другим моим функциям, которые вызывают findViewById.Но они все еще называют findViewById;как?Просто позвонив Objects.requireNonNull(getActivity()).findViewById.

Говоря о фрагментах, это эквивалентно?Например:

  1. С точки зрения потребления ОЗУ или ЦП
  2. С точки зрения поведения (есть ли риск при втором способе сделать это?)

1 Ответ

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

С точки зрения потребления ОЗУ или ЦП

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

С точки зрения поведения (есть ли риск со вторым способом сделать это?)

Вы не должны использовать getActivity (). FindViewById ().Фрагмент должен быть независимым и управлять своим представлением напрямую, а не через косвенное обращение (например, getActivity ()).Вы также рискуете внести незначительные ошибки из-за способа работы findViewById () (то есть он возвращает первое представление с указанным идентификатором, которое он обнаружил).

Представьте, что вы используете тот же фрагмент, что и страницы ViewPager.Использование getActivity (). FindViewById () означает, что вы будете ссылаться только на представления из первого экземпляра фрагмента, на который ссылается ViewPager (а не на другие страницы).Другой пример - когда у вас есть представление с идентификатором в действии и представление с таким же идентификатором во фрагменте (на более глубоком уровне).Использование getActivity (). FindViewById () будет ссылаться на вид деятельности, а не на вид, найденный во фрагменте.

...