Формы Xamarin: текущее состояние переключателя представления списка изменяется при обновлении списка? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть просмотр списка, который изначально показывает 20 пользователей.Всякий раз, когда нижняя точка списка достигает нового API-вызова REST, запускается и показывает больше пользователей (20,40,60 и т. Д.).При загрузке большего количества пользователей список обновляется.

Элементы списка просмотра имеют опцию переключения, и если я нажимаю опцию переключения, идентификатор пользователя этого пользователя добавляется в список.Если я снова нажму на тот же переключатель, идентификатор пользователя будет удален из списка.

Моя проблема в том, что переключатели выбранного пользователя отключаются при загрузке большего количества пользователей.Но идентификаторы пользователей, сохраненные в списке, не имеют проблем, список содержит идентификатор выбранного пользователя.Так как же я могу переключать уже выбранных пользователей после загрузки большего количества пользователей?

1 Ответ

0 голосов
/ 02 октября 2018

При получении пользователей от службы REST состояние каждого коммутатора равно false.Так что вам нужно сохранить свой локальный список.Затем вам нужно проверить с помощью первичного ключа, чтобы узнать, какие пользователи имели state = true.

Псевдокод:

var oldUsersList = new List<User>(UsersList);
UsersList = await RestService.GetUsers();
foreach (var user in oldUsersList)
{
    if (user.State)
    {
        UsersList.FirstOrDefault(u => u.UserId == user.UserId).State = true;
    }
}

Но вы делаетеLazy Loading неправильно!

То, как вы загружаете новые предметы, полностью уничтожает причины, по которым вы вообще хотите использовать Lazy Loading.Вы хотите выполнять отложенную загрузку (= загружать, когда нужны элементы), потому что вам не нужно загружать столько данных одновременно.Но вы всегда загружаете все предметы снова.

Что вам нужно сделать, это всегда загружать только 20 предметов.Затем добавьте эти 20 предметов в ваш локальный список.

Для этого вам нужно иметь возможность вызывать API REST со смещением и ограничением в качестве параметров.

Например: RestService.GetUsers (длинное смещение, длинный лимит)

  1. Загрузка: RestService.GetUsers(0, 20);
  2. Загрузка: RestService.GetUsers(20, 20);
  3. Загрузка: RestService.GetUsers(40, 20);
  4. Загрузка: RestService.GetUsers(60, 20);

Затем вы можете добавить результат в свой локальный список.Таким образом, вам не нужно загружать пользователей, которых вы уже загружали в прошлом.Кроме того, благодаря этому у вас не будет проблем с состоянием, поскольку ваши уже загруженные пользователи не меняются.

...