gpt4 book ai didi

java - 如何使用 ListView 删除 Android Studio 显示中的重复联系人

转载 作者:行者123 更新时间:2023-12-02 01:40:39 24 4
gpt4 key购买 nike

我正在编写一个程序来在 hp 中显示我的联系人列表,但我总是收到重复的联系人。我的代码哪里不正确?

display my code run

这是我的代码

在这里,我很困惑如何制作不需要将重复联系人添加到 ListView 的过滤器:

contactModelArrayList = new ArrayList<>();
String[] projection = new String[]{
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
};
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'",
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" COLLATE LOCALIZED ASC");

while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

ContactModel contactModel = new ContactModel();
contactModel.setName(name);
contactModel.setNumber(phoneNumber);

contactModelArrayList.add(contactModel);

}

phones.close();

contactAllAdapter = new ContactAllAdapter(this,contactModelArrayList);
listView.setAdapter(contactAllAdapter);

这适用于文件 ContactAll 适配器

public class ContactAllAdapter extends BaseAdapter {
private Context context;
private ArrayList<ContactModel> contactModels;
private String kode, nomor;

public ContactAllAdapter(Context context, ArrayList<ContactModel> contactModels) {
this.context = context;
this.contactModels = contactModels;
}

@Override
public int getViewTypeCount() {
if(getCount() > 0){
return getCount();
}else{
return super.getViewTypeCount();
}
}

@Override
public int getCount() {
return contactModels.size();
}

@Override
public Object getItem(int position) {
return contactModels.get(position);
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;

if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_all_contact, null, true);

holder.cname = convertView.findViewById(R.id.contact_name);
holder.cnumber = convertView.findViewById(R.id.contact_number);
holder.cinvite = convertView.findViewById(R.id.contact_invite);

convertView.setTag(holder);
}else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)convertView.getTag();
}

holder.cname.setText(contactModels.get(position).getName());
holder.cnumber.setText(contactModels.get(position).getNumber());

holder.cinvite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

final String appPackageName = context.getPackageName();
String text = context.getResources().getString(R.string.share_app_text);
String link = "https://play.google.com/store/apps/details?id=" + appPackageName;//app link is auto generated by using package name

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", text+"\n\n"+link);
sendIntent.putExtra("address", contactModels.get(position).getNumber());
sendIntent.setType("vnd.android-dir/mms-sms");
context.startActivity(sendIntent);
}
});

return convertView;
}

private class ViewHolder {

protected TextView cname, cnumber;
protected Button cinvite;
}
}

还有联系模型这个文件类

public class ContactModel {

private String name, number;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}
}

最佳答案

在您的 Activity 中(第一段代码):

    Set<ContactModel> contactModelSet = new HashSet<>();

// the same ...

ArrayList<ContactModel> contactModelArrayList = new ArrayList<>(contactModelSet);

contactAllAdapter = new ContactAllAdapter(this,contactModelArrayList);

在 ContactModel 类中:

@Override
public int hashCode() {
// calculate hash code if needed, something like this
return this.name.hashCode() + this.number.hashCode();
}

@Override
public boolean equals(Object obj) {
if (obj instanceof ContactModel) {
ContactModel cm = (ContactModel) obj;
return this.getName().equals(cm.getName()) && this.getNumber().equals(cm.getNumber());
}
return false;
}

@Override
public int compareTo(ContactModel o) {
// implement if you need to order
// don't know your criteria
// must return -1, 0, 1 if this is less, equal or greater than o
return 0;
}

关于java - 如何使用 ListView 删除 Android Studio 显示中的重复联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54474302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com