Я хотел бы знать, почему когда-то getActivity.findViewById() работает, а иногда он возвращает null?getActivity.findViewById() или mView.findViewById()
И с myView.findViewById() он работает?
Заранее спасибо :)
Я хотел бы знать, почему когда-то getActivity.findViewById() работает, а иногда он возвращает null?getActivity.findViewById() или mView.findViewById()
И с myView.findViewById() он работает?
Заранее спасибо :)
findViewById
- это не глобальный поиск View
. Он выглядит только в определенных местах. Если не указано значение View
(как в примере myView.findViewById()) findViewById
будет выглядеть в виде содержимого для Activity
или Fragment
, с которого вы его вызываете. В противном случае он будет выглядеть в пределах указанного вида.
Вы получите нуль, если вы ищете представление не в том месте - то есть то, что вы ищете, не в том месте, которое вы ищете.
Вот пример: если вы используете ListView
, элементы которого вы управляете с Adapter
вам нужно будет позвонить findViewbById
на надутом макет для indivdual элементов для того, чтобы установить их дочерние представления. Зачем? Потому что ListView
начинается пустым. Если вы вызвали findViewById
в общем ListActivity
, вы бы искали поля списка в неправильном месте, т. Е. Представление содержимого для активности - не макет, который в конечном итоге будет завышен для каждого элемента списка.
Я предположив вы в фрагменте и вызова getActivity.findViewById().
Рассматривая исходный код, Activity.findViewById() вызывает findViewById() в окне, которое вызывает findViewById() в своем представлении декора.
Поэтому, когда вы вызываете getActivity.findViewById(), вы ищете подзаголовок своего декора.
Если вы вызываете findViewById() непосредственно в представлении, вы ищете подвью из данного представления.
Так что, если вид не находится в вашем представлении с представлением декора, getActivity.findViewById() вернет значение null, пока будет работать view.findViewById().
Возможно, getActivity был пустым или вы пропустили setContentView перед вызовом findviewbyId. –
Должен ли идентификатор быть в разметке? – nsvir
конечно должно быть .. –