SortedList в адаптере RecyclerView - PullRequest
       18

SortedList в адаптере RecyclerView

0 голосов
/ 15 апреля 2020

Я загружаю адаптер с данными 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);
            }
        });

Спасибо, что прочитали мою просьбу. Надеюсь, что любой может помочь. Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...