WedX - журнал о программировании и компьютерных науках

Android RecycleView: добавление динамических представлений

Я решил обновить свой код, чтобы теперь использовать RecyclerView вместо списка, который я использую сейчас.

Как я понимаю, обычно это происходит следующим образом:

  • onCreateViewHolder — это увеличивает представление, делает findviewbyid и возвращает его как объект ViewHolder для представления.
  • onBindViewHolder — присваивает значения держателя представления представлению позиции (которое перерабатывается).

Это все прекрасно и денди... Если представления в списке содержат одинаковые поля...

Однако мои представления в моем списке отличаются, прежде чем я программно добавил представления в зависимости от списка адаптера (в методе getView).

Есть ли способ «хорошей практики» справиться с этим, я не могу придумать хороший способ обойти это.

getViewItemType не работает, так как представления уникальны и не определены заранее.

01.03.2015

  • Знаете ли вы о getItemViewType()? 02.03.2015
  • @Varundroid О, я нехороший, сэр! Я немедленно рассмотрю это! 02.03.2015
  • @Varundroid После просмотра его прямого описания кажется, что это то, что я ищу! Я обновлю свой вопрос (или отвечу на него) в зависимости от моих выводов. 02.03.2015
  • Что вы подразумеваете под независимыми взглядами? 02.03.2015
  • @Varundroid У меня есть список, в котором каждый элемент содержит другой список (можно сказать, многомерный массив). Так что каждый взгляд уникален! 02.03.2015

Ответы:


1

Это то, что вам нужно использовать, когда вы используете разные типы представлений внутри ListView или RecyclerView: -

getItemViewType() and getViewTypeCount()

Сначала вам нужно использовать getViewTypeCount() и вернуть количество уникальных представлений, которые вам нужны внутри вашего списка. Затем переопределите getItemViewType() и верните тип представления, который вы хотите увеличить внутри строки списка.

Надеюсь, это поможет.

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

01.03.2015
  • Я изучил это дальше, и, как вы описываете, к сожалению, это предопределенные представления, мои представления создаются в зависимости от данных, что делает их уникальными для каждого представления! Другими словами, я не могу надувать просмотры, это нужно делать программно. Надеюсь, ваш ответ поможет другим! 02.03.2015
  • Да, вы все еще можете это сделать. Имейте отдельный xml в зависимости от того, сколько просмотров вам нужно раздуть как элементы ListView. Если у вас есть огромное количество совершенно разных типов представлений, я бы рекомендовал использовать LinearLayout внутри ScrollView. Нет смысла иметь ListView, когда представления совсем не одинаковы, потому что ListView хорошо справляется с повторяющимися представлениями, поэтому он может их перерабатывать. 02.03.2015
  • Ааа, так вы предлагаете мне внедрить пользовательскую систему, хм, я посмотрю на это, теперь это имеет смысл, когда вы об этом упомянули. 02.03.2015
  • Независимо от того, насколько динамичны ваши представления, вы все равно можете создавать их в формате xml и расширять на основе критериев, используя if, else, и заполнять их значениями внутри метода getView. 02.03.2015
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]