Я загружаю адаптер с данными c. Я пытался использовать sortedList для обработки задания для меня (сортировка элементов, добавление элементов (включая проверку, если элемент уже существует), удаление элементов.
Элементы имеют уникальный идентификатор, который является строкой и полем расстояние (целое число в метрах).
Я хочу, чтобы уникальный идентификатор был значением для поиска дубликатов, а расстояние - значением, по которому сортируется список. Пока я могу достичь только одного из эти цели за один раз:
Случай A: я сортирую по идентификатору, правильность поведения в отношении уникальности и правильное добавление и удаление элементов.
Случай B: я смешиваю на расстоянии: элементы сортировка по расстоянию, однако есть дубликаты и элементы не могут быть удалены и т. д. c.
Нет много информации о sortedList, который можно найти, и о многих из них. У кого-нибудь получалось найти решение? Я добавляю случай с двумя фрагментами A и дело B. за ваше понимание моего дела.
//Case A
list = new SortedList<UserItem>(UserItem.class, new SortedList.Callback<UserItem>() {
@Override
public int compare(UserItem o1, UserItem o2) {
int compare = o1.getUsernumber().compareTo(o2.getUsernumber());
return compare;
}
@Override
public void onChanged(int position, int count) {
notifyItemRangeChanged(position, count);
}
@Override
public boolean areContentsTheSame(UserItem oldItem, UserItem newItem) {
if (oldItem.getDistance() == newItem.getDistance()){
return true;
}
return false;
}
@Override
public boolean areItemsTheSame(UserItem item1, UserItem item2)
return item1.getUsernumber().equals(item2.getUsernumber());
}
@Override
public void onInserted(int position, int count) {
notifyItemRangeInserted(position, count);
}
@Override
public void onRemoved(int position, int count) {
notifyItemRangeRemoved(position, count);
}
@Override
public void onMoved(int fromPosition, int toPosition) {
notifyItemMoved(fromPosition, toPosition);
}
});
//Case B
list = new SortedList<UserItem>(UserItem.class, new SortedList.Callback<UserItem>() {
@Override
public int compare(UserItem o1, UserItem o2) {
if (o1.getDistance() != o2.getDistance()){
if (o1.getDistance() < o2.getDistance()) {
return -1;
} else if (o1.getDistance() > o2.getDistance()) {
return 1;
}
}
int compare = o1.getUsernumber().compareTo(o2.getUsernumber());
return compare;
}
@Override
public void onChanged(int position, int count) {
notifyItemRangeChanged(position, count);
}
@Override
public boolean areContentsTheSame(UserItem oldItem, UserItem newItem) {
if (oldItem.getDistance() == newItem.getDistance()){
return true;
}
return false;
}
@Override
public boolean areItemsTheSame(UserItem item1, UserItem item2) {
return item1.getUsernumber().equals(item2.getUsernumber());
}
@Override
public void onInserted(int position, int count) {
notifyItemRangeInserted(position, count);
}
@Override
public void onRemoved(int position, int count) {
notifyItemRangeRemoved(position, count);
}
@Override
public void onMoved(int fromPosition, int toPosition) {
notifyItemMoved(fromPosition, toPosition);
}
});
Спасибо, что прочитали мою просьбу. Надеюсь, что любой может помочь. Приветствия