2013-09-10 5 views
0

Скажем, у меня есть адаптер, который взаимодействует с общим набором данных. Во время компоновки составного представления (т. Е. ListView) вызывается getView и происходит доступ к адаптеру. GetView вызывается для последующих элементов. Адаптер обеспечивает прямую блокировку ссылок на элементы в общем наборе данных.Что происходит, когда источник данных адаптеров недействителен во время компоновки?

Теперь набор данных может измениться из-под адаптера. В этом случае адаптер будет недействительным при изменении набора данных. Однако возможно, что данные недействительны, тогда как пользовательский интерфейс находится в стадии ничьей или макета.

Вопрос в том, что произойдет, если другой поток аннулирует набор данных, когда представление выполняет итерацию через его дочерние элементы (getView вызывается и к нему подключается адаптер)?

ответ

0

Это зависит от того, как выглядят ваши данные резервного копирования и как вы его аннулировали, а также как реализован ваш getView. В зависимости от этого вы можете получить представление, представляющее старые данные, новые данные или какое-то неопределенное состояние, которое может привести к непредвиденным данным или даже исключению NullPointerException или другому исключению.

Более подробный ответ может быть предоставлен, если вы предоставите более подробную информацию в своем вопросе о типе данных и адаптере. Исходный код для вашего адаптера, особенно ваш метод getView, также даст более конкретный ответ.

+0

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

0

Вы всегда должны изменять содержимое своего адаптера из своего пользовательского интерфейса, чтобы предотвратить возникновение проблем. В противном случае вы будете иногда получать ConcurrentModificationException, NullPointerException или IndexOutOfBoundsException.

Я очень рекомендую говорить о ListViews в режиме ввода-вывода 2010, если у вас еще не было возможности посмотреть его, есть тонна хорошей информации о том, как они работают и как их оптимизировать.

Google I/O 2010 - The World of ListView

+0

Исключение составляют тривиальные меры защиты. –

Смежные вопросы