android好友联系人按字母排序分组
时间: 2023-07-28 17:25:38 浏览: 105
您可以使用Android中的ListView和Adapter来实现好友联系人按字母排序分组的功能。具体步骤如下:
1. 首先需要将好友联系人的数据按照首字母进行排序,可以使用Collections.sort()方法实现。
2. 接着,需要将排序后的数据按照首字母分组,可以使用HashMap来存储。
3. 创建一个自定义的Adapter并重写getView()方法,在getView()方法中根据不同的位置展示不同的数据。
4. 最后,将Adapter设置给ListView即可。
下面是一个简单的示例代码,仅供参考:
```
// 好友联系人数据
List<Contact> contacts = new ArrayList<>();
// 对数据按照首字母进行排序
Collections.sort(contacts);
// 按照首字母分组存储数据
HashMap<String, List<Contact>> contactMap = new HashMap<>();
for (Contact contact : contacts) {
String firstLetter = contact.getName().substring(0, 1);
if (contactMap.containsKey(firstLetter)) {
contactMap.get(firstLetter).add(contact);
} else {
List<Contact> list = new ArrayList<>();
list.add(contact);
contactMap.put(firstLetter, list);
}
}
// 自定义Adapter
class ContactAdapter extends BaseAdapter {
private List<String> letters;
private HashMap<String, List<Contact>> contactMap;
private LayoutInflater inflater;
public ContactAdapter(List<String> letters, HashMap<String, List<Contact>> contactMap, Context context) {
this.letters = letters;
this.contactMap = contactMap;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return letters.size();
}
@Override
public Object getItem(int position) {
return contactMap.get(letters.get(position));
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_contact, null);
holder = new ViewHolder();
holder.tvLetter = convertView.findViewById(R.id.tv_letter);
holder.lvContacts = convertView.findViewById(R.id.lv_contacts);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 设置首字母
holder.tvLetter.setText(letters.get(position));
// 设置联系人列表
List<Contact> contacts = contactMap.get(letters.get(position));
ContactListAdapter adapter = new ContactListAdapter(contacts, inflater);
holder.lvContacts.setAdapter(adapter);
return convertView;
}
class ViewHolder {
TextView tvLetter;
ListView lvContacts;
}
}
// 自定义联系人列表Adapter
class ContactListAdapter extends BaseAdapter {
private List<Contact> contacts;
private LayoutInflater inflater;
public ContactListAdapter(List<Contact> contacts, LayoutInflater inflater) {
this.contacts = contacts;
this.inflater = inflater;
}
@Override
public int getCount() {
return contacts.size();
}
@Override
public Object getItem(int position) {
return contacts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_contact_list, null);
holder = new ViewHolder();
holder.tvName = convertView.findViewById(R.id.tv_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvName.setText(contacts.get(position).getName());
return convertView;
}
class ViewHolder {
TextView tvName;
}
}
```
在上述示例代码中,我们首先将好友联系人按照首字母排序并分组,然后使用自定义的ContactAdapter来展示数据。在ContactAdapter中,我们重写了getView()方法来展示分组后的数据,其中使用了一个自定义的ContactListAdapter来展示每个分组中的联系人。需要注意的是,ListView的高度需要设置为wrap_content,否则可能会导致只显示一个分组的问题。