我想知道是否有办法将项目添加到ListView而不会导致重新加载整个列表.
我有一个BaseAdapter派生的ListView适配器,当底层模型添加一个新元素时,它调用notifyDataSetChanged(),它触发ListView重新加载.
列表中的元素具有图像,这些图像根据元素的内容动态加载.问题是,当在重新加载期间调用getView()时,传递以供重用的convertView参数之前来自不同的位置,因此也必须重新加载图像,这会导致相当难看的闪烁.
如果我只在最后添加一个项目(这将是添加新项目的唯一方法),那么有没有办法不重新加载整个列表?或者至少以某种方式将单元重用于相同的位置,如果可能的话,以避免昂贵的图像重载?
我想知道是否有办法让特定联系人所属的群组?
假设我得到了所有联系人的数组:
NSMutableArray *people = [[[(NSArray*)
ABAddressBookCopyArrayOfAllPeople(addressBook) autorelease]
mutableCopy] autorelease];
Run Code Online (Sandbox Code Playgroud)
然后迭代它们:
for (int personN = 0; personN < [people count]; personN++) {
ABRecordRef person = [people objectAtIndex:personN];
NSString* firstName = (NSString*)ABRecordCopyValue(person,
kABPersonFirstNameProperty);
//and so on...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得该人的团体名称?在MacOS上有ABPerson类,它具有我所需要的parentGroups方法,但我在iOS上看不到类似的东西.
我想可以改为获取所有组的数组,然后迭代组数组并检索每个组的联系人记录,但我希望有更直接的方法吗?
PS看起来没有办法做到这一点,只能迭代组.对于那些后来发现这个问题的人来说,有一点需要注意:要获得所有联系人,你必须遍历组并获得每个组的成员(ABGroupCopyArrayOfAllMembers),然后遍历所有联系人(ABAddressBookCopyArrayOfAllPeople),因为没有"null"组.另请注意,ABAddressBookCopyArrayOfAllPeople还会为您提供已使用ABGroupCopyArrayOfAllMembers调用获取的联系人,因此请务必检查重复项.