Как отсортировать строки в Android RecyclerView?
У меня есть recyclerView, полный CardViews, у которого есть 2 параметра (оба из них являются строками), один из них - это заголовок, я хотел бы иметь кнопку для сортировки по алфавиту на основе титта.
так как в нем не слишком много элементов, я решил использовать сортировку вставки, которая является o (n ^ 2), и это моя реализация:
public void ISortDes(String[]strings){
int j;
String key;
int i;
for (j = 1; j < strings.length; j++)
{
key = strings[ j ];
for(i = j - 1; (i >= 0) ; i--)
{
if (key.compareTo(strings[i]) > 0){
break;
}
strings[ i+1 ] = strings[ i ];
}
strings[ i+1 ] = key;
}
for (int k = 0; k < strings.length; k++){
System.out.println(strings[k]);
}
}
Он принимает массив строк и упорядочивает их.
И это метод моего RecyclerView, который принимает параметры:
private void initializeData() {
categories = new ArrayList<>();
categories.add(new Categories("CARS", "CARS"));
categories.add(new Categories("SPORTS", "SPORTS"));
categories.add(new Categories("GAMING", "GAMING"));
categories.add(new Categories("GAMBLING", "GAMBLING"));
categories.add(new Categories("TECH", "TECH"));
categories.add(new Categories("NATURE", "NATURE"));
categories.add(new Categories("RANDOM", "RANDOM"));
categories.add(new Categories("COUSINE", "COUSINE"));
categories.add(new Categories("HISTORY", "HISTORY"));
categories.add(new Categories("MUSIC", "MUSIC"));
categories.add(new Categories("STUDIES", "STUDIES"));
}
Я думаю, что мне нужно каким-то образом передать этот первый параметр в String Array и затем отсортировать его.
Идея состоит в том, чтобы метод сортировки был нажат на кнопку в той же самой Деятельности, где отображается RecyclerView, и при нажатии ее придется сортировать, не переходя в другую активность.
Я немного потерялся здесь.
В резюме, что я пытаюсь сделать, это иметь buttom, который упорядочивает элементы (которые в данном случае являются CardView) RecyclerView в алфавитном порядке на основе параметра title.
Является ли моя идея правдой, есть ли у вас другой способ сделать это или что мне делать, чтобы это сделать?
Спасибо миллион.
Ответы
Ответ 1
Самый простой способ сортировки списка - использовать java.util.Collections
Collections.sort(categories, new Comparator<Categories>() {
@Override
public int compare(Categories lhs, Categories rhs) {
return lhs.title.compareTo(rhs.title);
}
});
Это будет сравнивать символ заголовка по символу. и сортирует ваш список от a до z.
Не забывайте после изменения, чтобы уведомить список, который данные изменили с помощью notifyDataSetChanged()
(от вашего RecyclerView.Adapter
).