Xamarin形式:当刷新列表视图时,当前列表视图开关状态改变吗?

时间:2018-10-02 07:54:52

标签: listview xamarin.forms uiswitch

我有一个列表视图,最初显示20个用户。每当列表视图底部到达一个新的REST API调用时,就会开始调用,并显示更多用户(20、40、60等)。当加载更多用户时,列表会刷新。

Listview项具有切换选项,如果我按切换选项,则该用户的用户名将添加到列表中。如果我再次按下同一开关,则该用户名将从列表中删除。

我的问题是,加载更多用户时,所选用户的开关将处于关闭状态。但是保存在列表中的用户ID没问题,该列表包含所选用户的ID。那么在加载更多用户之后如何在已选择用户的切换上进行操作?

1 个答案:

答案 0 :(得分:0)

从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;
    }
}

但是您在执行延迟加载时出错!

加载新项目的方式完全消除了您希望完全进行延迟加载的原因。您想要进行延迟加载(=当需要项目时加载),因为您不需要一次加载太多数据。但是您总是会再次加载所有项目。

您应该做的总是始终只加载20个项目。然后将这20个项目添加到您的本地列表中。

为此,您需要能够使用offset和limit作为参数来调用REST API。

例如: RestService.GetUsers(长偏移,长限制)

  1. 加载:RestService.GetUsers(0, 20);
  2. 加载:RestService.GetUsers(20, 20);
  3. 加载:RestService.GetUsers(40, 20);
  4. 加载:RestService.GetUsers(60, 20);

然后,您可以将结果添加到本地列表中。这样,您无需加载过去已经加载的用户。同样,这样做也不会造成状态问题,因为已经加载的用户不会更改。