Я хочу отобразить список элементов и разделить их с помощью символа «<» в качестве разделителя, чтобы передать информацию об отношениях между этими элементами. Кроме того, я должен иметь возможность скрыть разделитель после последнего элемента в списке. Я новичок в разработке 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. Однако это также не похоже на предполагаемый способ сделать это.
Я почти уверен, что эта функция возможна, но я сомневаюсь, что какой-либо из перечисленных мной способов является правильным. Какие-либо предложения?
У вас может быть отдельный макет для элемента просмотра ресайклера, в котором вы можете оставить стрелку в левом центре, с помощью адаптера просмотра ресайклера только вы будете настраивать список. При этом каждое свойство элемента добавляет логическое свойство (на основе этого вы можете показать / скрыть). В любой момент вы можете изменить свойства конкретного элемента и список обновлений.




Это может быть просто достигнуто в ваших макетах и модели, которую вы передаете своему 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)
}
Если у вас есть другая логика, которую нужно скрыть / показать, измените ее соответствующим образом.
Таким образом, вы также можете изменить символ при изменении отношения или скрыть / показать его в любом элементе списка. Не только в последнем пункте.
сколько пунктов в вашем списке?