Дети моего нестандартного макета не будут корректно перекомпонованы и повторно измерены - PullRequest
3 голосов
/ 06 марта 2012

Я реализовал пользовательский макет, который расширяет ViewGroup.В методе onLayout () я создаю цикл для всех своих детей: я добавляю их в макет, измеряю их, а затем размещаю в макете.Работает просто отлично.

Но теперь я хочу, чтобы у моих детей был динамический контент.Поэтому я добавил обработчик и исполняемый файл для держателей просмотра каждого из моих детей (мой макет заполнен адаптером).Этот runnable стремится обновлять текстовое представление каждые 10 секунд.Что происходит, так это то, что TextView усекается.Я обнаружил, что на самом деле он принимает ширину первой заданной строки и никогда не будет переизмерять или перекомпоновывать заново.Я решил расширить свой пользовательский макет FrameLayout.И если в моем методе onLayout () я вызываю super.onLayout (), все работает просто отлично.Каждый раз, когда TextView в дочерних элементах обновляется с помощью Runnable, мне перезванивают по методу onLayout моего пользовательского макета.

Большой вопрос - почему ?Расширения FrameLayout недостаточно, я должен вызвать super.onLayout ().Я проверил код этого метода и не могу понять, что он делает, чтобы он работал.Так как макет является одним проходом сверху вниз в соответствии с документацией, , почему при вызове этого метода мой пользовательский макет перераспределяется при каждом обновлении потомков ?Обратите внимание, что я пытался вызвать requestLayout () и invalidate () для моих детей, но безрезультатно.

Спасибо, что читаете меня.Я могу предоставить код, если он недостаточно ясен.

...