【发布时间】:2015-02-20 11:23:33
【问题描述】:
我需要为地址簿创建一个自定义适配器,在自定义布局中按名字字母对它们进行分组。我怎样才能达到这样的结果?
我创建了一个Hashmap<String firstLetter,Arraylist<Contacts>>,但我不知道如何将它传递给适配器以使列表中的每个单个元素 都可点击。
到目前为止我发现的最佳解决方案是为我的 HashMap 的每个字母膨胀尽可能多的 ListView,并将适配器设置为它
for (Map.Entry<Character, ArrayList<RlyJiffyContact>> entry : contactLinkedHashMap.entrySet()) {
Character key = entry.getKey();
ArrayList<RlyJiffyContact> value = entry.getValue();
if (value != null && !value.isEmpty()) {
LinearLayoutWithLabel llbel = new LinearLayoutWithLabel(getContext());
llbel.setOrientation(LinearLayout.VERTICAL);
llbel.setPadding(R.dimen.default_margin_left, R.dimen.default_margin_top, R.dimen.default_margin_right, R.dimen.default_margin_bottom);
llbel.setText(key.toString().toUpperCase());
ListView list = new ListView(getContext());
list.setAdapter(new RlyJiffyContactsAdapter(getContext(), value));
llbel.addView(list);
linear.addView(llbel);
}
和适配器
public class MYADAPTER extends ArrayAdapter<MYELEMENT> {
LayoutInflater vi;
private Context context;
private List<RlyJiffyContact> contacts;
public MYADAPTER(Context context, List<MYELEMENT> contacts) {
super(context, 0, contacts);
vi = LayoutInflater.from(context);
this.context = context;
this.contacts = contacts;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderItem holderItem;
View v = convertView;
if (convertView == null) {
holderItem = new ViewHolderItem();
convertView = vi.inflate(R.layout.reply_jiffy_contact_line, null);
holderItem.contactNumber = (TextView) convertView.findViewById(R.id.contact_number);
holderItem.displayName = (TextView) convertView.findViewById(R.id.contact_display_name);
holderItem.preferedImage = (ImageView) convertView.findViewById(R.id.icon_prefered);
convertView.setTag(holderItem);
} else {
holderItem = (ViewHolderItem) convertView.getTag();
}
RlyJiffyContact item = getItem(position);
holderItem.contactNumber.setText(item.getPhoneNumber());
holderItem.displayName.setText(item.getName() + " " + item.getSurname());
if (item.isPrefered()) {
holderItem.preferedImage.setVisibility(View.INVISIBLE);
} else {
holderItem.preferedImage.setVisibility(View.VISIBLE);
}
convertView.setOnClickListener(new ContactPhoneListener(item.getPhoneNumber()));
return convertView;
}
static class ViewHolderItem {
TextView contactNumber;
TextView displayName;
ImageView preferedImage;
}
private class ContactPhoneListener implements View.OnClickListener {
private String number;
public ContactPhoneListener(String number) {
this.number = number;
}
@Override
public void onClick(View v) {
Intent i = new Intent(getContext(), FIRSTACTIVITY.class);
i.putExtra(Constants.CONTACT_IDENTIFIER, number);
i.setAction(Constants.SENDING_CONTACT);
context.startActivity(i);
}
}
但结果是我只能看到每个字母的第一个元素( 示例:
我的联系人:
- 安妮一
- 安妮 B
安东尼 c
鲍勃
- 鲍勃 b
- 鲍勃·c
我在列表中看到的内容
- 安妮一
- 鲍勃一个
谢谢!
【问题讨论】:
标签: android listview adapter android-arrayadapter