Почему Wrap_Content запускает BindView более одного раза - PullRequest
9 голосов
/ 04 июля 2011

Я работаю над приложением Android с listView и в процессе его оптимизации. Он использует собственный адаптер курсора в одном действии, и я заметил, что bindview () запускался дважды для каждой строки списка. Исследуя методы BindView () и NewView (), я прочитал в посте, что наличие Wrap_Content для ширины моего списка было плохой идеей. Я переключил его на Fill_Parent и теперь альт bindview () и newview () запускаются только один раз для каждого элемента.

Чтобы лучше понять внутреннюю часть ОС Andorid, я хотел бы знать, почему Wrap_Content вызывал многократное срабатывание bindview ().

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

Любой ответ действительно приветствуется.

Спасибо, Джордж

1 Ответ

10 голосов
/ 04 июля 2011

Если я правильно помню из видео из Google I / O, установка ширины (или высоты) ListView в wrap_content заставит его измерить первые 3 элемента и основать их размеры на этих. Чтобы измерить эти первые 3 элемента, он должен вызвать bindView(), чтобы заполнить их. Как только он измерил, он будет заполнен полностью и снова вызовет bindView() для тех первых 3 и любых последующих.

Это связано с тем, что ListView сохраняет в памяти только то, что находится на экране, когда у вас может быть потенциально бесконечное количество элементов в списке. Он не предназначен для wrap_content вашего самого большого предмета, потому что он может застрять в фазе рисования навсегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...