Здравствуйте, я новичок в этом сайте и в мире android dev. Я хотел создать представление ресайклера, которое будет выглядеть так: rv-flow.png .
Обычно я получаю данные следующего типа: List<Item>
где Item
имеет следующая структура:
data class Item (val name:String ,val balls:List<Ball> )
data class Ball (val id:Int, val name:String, val price:Int)
Итак, пример данных будет таким:
[
{
"Nike" ,
[ {11,"basketball" , 100} , {12,"Football" , 160} , ... ]
},
{
"Cosco" ,
[ {12,"basketball" , 100} , {13,"tennisball" , 140} , ... ]
},
...
]
Я должен отобразить такой макет. Ограничения:
Зеленые кружки - это не просто дизайнерские изображения или одно представление, а, скорее, полностью интерактивные группы просмотра, состоящие из названия, цены и прочего.
Эти представления должны отображаться на одной странице, поэтому подход, подобный игровому магазину, с вложенным пользовательским интерфейсом представления ресайклера (тот, где дополнительные горизонтальные элементы go выходят за пределы экрана), не применим
Я хочу, чтобы эти дочерние представления были в текущем диспетчере компоновки. Это термин, который я только что придумал для обозначения того, как компании реализуют «теги», например переполнение стека . теги не ограничены конкретным столбцом, а скорее принимают любой размер, который им требуется, а затем переходят к следующей строке
Я не понимаю, как go дальше, поэтому не смог написать код, но вот некоторые подходы, которые я слышал:
(A) Я могу создать собственное представление, которое при передаче экземпляра xml (например, R.layout.ball
, xml имея ui для конкретного экземпляра класса Ball
), onclicklistener
и List<Item>
, он автоматически сгенерирует полный ui для всех элементов. Эту группу просмотра можно было бы использовать в другом макете R.layout.item
, который я использую в recyclerview. Но я не уверен, как создать такое представление, и возможна ли такая настраиваемая группа представлений, или она будет нормально работать с переработкой recyclerview?
(B) Я мог бы сгладить свои данные, чтобы они выглядели как список общих c объекты, например:
val flattenedItems:List<Any> = listOf(
{"Nike", {} },
{"Nike", {11,"basketball" , 100} },
{"Nike", {12,"Football" , 160} },
...
{"Cosco", {} },
{"Cosco", {11,"basketball" , 100} },
{"Cosco", {12,"Football" , 160} },
)
, а затем используйте его с GrdLayoutManager
. при передаче экземпляра менеджера я мог бы определить правило для проверки того, является ли элемент заголовком или подэлементом, и предоставить ему размер столбца соответственно и ui соответственно. Но это выглядит таким излишеством, когда элементы или их подэлементы находятся в сотнях и я также потеряет текучесть, которую хочет исходный пользовательский интерфейс.
Что вы предлагаете? Любой другой подход, о котором я не мог придумать?