#android
#Android
Вопрос:
Я получаю расстояние между двумя местоположениями и показываю его на вид переработчика, это скриншот :
Я попытался отсортировать RecyclerView в порядке возрастания(сначала кратчайшее расстояние) , но это не работает. Это мой код :
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Collections.sort(partnerModelList, new Comparatorlt;PartnerModelgt;() { @Override public int compare(PartnerModel lhs, PartnerModel rhs) { return String.valueOf(km).substring(0, 5) .compareTo(String.valueOf(km).substring(0, 5)); } }); notifyDataSetChanged(); }
Как этого добиться, пожалуйста, дайте мне знать . Миллионы благодарностей
Комментарии:
1. Сначала вам нужно отсортировать данные в списке источников данных (список, в котором содержатся данные для адаптера recyclerview). Как только вы отсортируете его в списке, адаптер отобразит данные в соответствии с вашим выбором. Но вы пытаетесь отсортировать данные после того, как адаптер recyclerview начнет привязывать данные к своему держателю просмотра.
Ответ №1:
то, что вы делаете, — это сортировка данных «на более позднем этапе», т. Е. когда данные привязываются к держателю представления. Все, что вам нужно сделать, это сначала отсортировать данные в соответствии с требованиями, а затем привязать их к владельцу представления. в идеале предварительная обработка данных должна выполняться до их передачи адаптеру, но вы также можете выполнить эти операции в конструкторе адаптера или любой другой функции, которая вызывается перед onbindViewHolder
методом адаптера, а затем уведомить адаптер вызовом notifyDataSetChanged()
или notifyItemChanged()
Ответ №2:
Вы должны выполнить сортировку данных следующим образом:
... list.sort() yourRecyclerViewAdapter.setList(list) ...