我有一个列表视图,最初显示20个用户。每当列表视图底部到达一个新的REST API调用时,就会开始调用,并显示更多用户(20、40、60等)。当加载更多用户时,列表会刷新。
Listview项具有切换选项,如果我按切换选项,则该用户的用户名将添加到列表中。如果我再次按下同一开关,则该用户名将从列表中删除。
我的问题是,加载更多用户时,所选用户的开关将处于关闭状态。但是保存在列表中的用户ID没问题,该列表包含所选用户的ID。那么在加载更多用户之后如何在已选择用户的切换上进行操作?
答案 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(长偏移,长限制)
RestService.GetUsers(0, 20);
RestService.GetUsers(20, 20);
RestService.GetUsers(40, 20);
RestService.GetUsers(60, 20);
然后,您可以将结果添加到本地列表中。这样,您无需加载过去已经加载的用户。同样,这样做也不会造成状态问题,因为已经加载的用户不会更改。