Я бы сказал, что эту проблему трудно решить с помощью стандартных компонентов из-за проблемы отображения данных в элементы в строки.
Если вы, например, используете Cursor
с x
строк для передачи данных адаптеру, тогда общее число элементов, как видно из Adapter
, также равно x
.Однако, поскольку вы условно отображаете два элемента в одну и ту же строку, это означает, что ListView
увидит y
строк в Adapter
, где y <= x
.Но вы не можете легко сказать с самого начала, что будет y
.Кроме того, если ListView
запрашивает Adapter
для элемента i, где 0 <= i <y, у <code>Adapter не будет (простого) способа определить, какие элементы из Cursor
будут i
map to.
При этом жизнеспособным решением было бы создать подкласс AdapterView
или ListView
и самостоятельно реализовать расположение элементов.Когда вы получаете каждый элемент из Adapter
, вы будете измерять и размещать его в зависимости от размеров окружающих элементов адаптера.
Другое решение, которое может работать для вас, если вы этого не сделаетеиметь большое количество элементов - это использовать два пользовательских Adapter
s, один из которых называется ItemAdapter
, а другой - RowAdapter
.ItemAdapter
будет раздувать фактические предметы на основе (предполагаемого) Cursor
.RowAdapter
будет использовать ItemAdapter
, чтобы получить предметы и объединить их в ряды.ListView
в свою очередь будет использовать RowAdapter
.Проблема в том, что для того, чтобы узнать, сколько строк будет выдано RowAdapter
, необходимо измерить все элементы от ItemAdapter
до того, как RowAdapter
будет подключен к ListView
.