Почему Wrap_Content Fire BindView более одного раза

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

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

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

Любой ответ действительно оценен.

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

Solutions Collecting From Web of "Почему Wrap_Content Fire BindView более одного раза"

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

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