Recyler View, каждый элемент которого содержит настраиваемый текучий макет - PullRequest
0 голосов
/ 20 июня 2020

Здравствуйте, я новичок в этом сайте и в мире 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} , ... ]
   },

   ...


]

Я должен отобразить такой макет. Ограничения:

  1. Зеленые кружки - это не просто дизайнерские изображения или одно представление, а, скорее, полностью интерактивные группы просмотра, состоящие из названия, цены и прочего.

  2. Эти представления должны отображаться на одной странице, поэтому подход, подобный игровому магазину, с вложенным пользовательским интерфейсом представления ресайклера (тот, где дополнительные горизонтальные элементы go выходят за пределы экрана), не применим

  3. Я хочу, чтобы эти дочерние представления были в текущем диспетчере компоновки. Это термин, который я только что придумал для обозначения того, как компании реализуют «теги», например переполнение стека . теги не ограничены конкретным столбцом, а скорее принимают любой размер, который им требуется, а затем переходят к следующей строке


Я не понимаю, как 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 соответственно. Но это выглядит таким излишеством, когда элементы или их подэлементы находятся в сотнях и я также потеряет текучесть, которую хочет исходный пользовательский интерфейс.

Что вы предлагаете? Любой другой подход, о котором я не мог придумать?

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