Разделитель RecyclerView с символом

Я хочу отобразить список элементов и разделить их с помощью символа «<» в качестве разделителя, чтобы передать информацию об отношениях между этими элементами. Кроме того, я должен иметь возможность скрыть разделитель после последнего элемента в списке. Я новичок в разработке Android, поэтому я использую RecyclerView в целом, потому что он считается естественным / правильным способом отображения списков вещей в Android. В результате пользовательский интерфейс должен выглядеть так: https://i.stack.imgur.com/JoJmj.jpg

Я исследовал это и обнаружил, что для RecyclerView есть встроенная функция ItemDecoration. Однако я смог найти только, как провести линию:

recyclerView.addItemDecoration(
            new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL));

Из того, что я вижу, вы должны использовать для этого drawable, и что все еще не очень удобно скрывать последний разделитель.

Другой вариант, который я нашел, - это создать разнородный макет внутри адаптера RecyclerView: https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView, Итак, поместите разделитель в качестве второго макета viewType и надуйте его после макета элемента. Но это кажется излишним, а также делает адаптер менее пригодным для повторного использования. Подобно этому, есть возможность создать макет для RecyclerView с обоими представлениями (элемент и разделитель) в нем и раздуть их в адаптере RecyclerView. Однако это также не похоже на предполагаемый способ сделать это.

Я почти уверен, что эта функция возможна, но я сомневаюсь, что какой-либо из перечисленных мной способов является правильным. Какие-либо предложения?

сколько пунктов в вашем списке?

Pemba Tamang 01.12.2018 10:56

У вас может быть отдельный макет для элемента просмотра ресайклера, в котором вы можете оставить стрелку в левом центре, с помощью адаптера просмотра ресайклера только вы будете настраивать список. При этом каждое свойство элемента добавляет логическое свойство (на основе этого вы можете показать / скрыть). В любой момент вы можете изменить свойства конкретного элемента и список обновлений.

Raj 01.12.2018 11:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
302
3

Ответы 3

Это может быть просто достигнуто в ваших макетах и ​​модели, которую вы передаете своему ViewHolder, чтобы связать его. Чтобы быть более ясным, ваша модель может иметь флаг, указывающий, должен ли отображаться разделитель или нет, а затем при соответствующей привязке представления просто показать / скрыть этот элемент «<» или любой другой вид разделителя / представления. Таким образом, внутри макета элемента [или представления, которое может быть создано программно] вы можете добавить, например, TextView в качестве разделителя и установить его видимость на GONE или VISIBLE.

Самым чистым решением является создание собственной реализации ItemDecoration. Вам просто нужно переопределить два метода.

С getItemOffsets() вы добавляете смещение между элементами, это похоже на добавление отступов или полей.

Теперь, когда у вас есть «свободное» пространство между элементами RecyclerView, переопределив метод onDraw(), вы можете легко нарисовать символ «<», используя предоставленный метод Canvas объекта drawText().

Самый простой способ - учесть «<» в макете вашего элемента через TextView. Если вы просто хотите скрыть это на последнем элементе, вы можете проверить, например:

if (position==list.Size()-1){
   divider.setVisibility(View.Gone)
}else{
   divider.setVisibility(View.Visible)
}

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

Таким образом, вы также можете изменить символ при изменении отношения или скрыть / показать его в любом элементе списка. Не только в последнем пункте.

Другие вопросы по теме