Ce que je veux réaliser est simple. Quand je tape, je devrais lister les contacts de mon téléphone avec leur vignette (photo). Au début, je pouvais faire l'application ne liste que les noms des contacts. Mais après avoir ajouté les codes ci-dessous autocomplete ne fonctionne pas. Il n'y a pas d'erreursContacts avec les miniatures (photos) dans AutoCompleteTextView
Voici un code:
Voici comment je configurer mon adaptateur
AsyncTask.execute(new Runnable() {
@Override
public void run() {
adapter = new ContactsAdapter(getApplicationContext(),
getAllContactNamesAndThumbs());
mNameEditText.setAdapter(adapter);
}
});
La méthode getAllContactNamesAndThumbs:
private List<Map<String, Object>> getAllContactNamesAndThumbs() {
List<Map<String, Object>> namesAndThumbs;
// Check the SDK version and whether the permission is already granted or not.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);
namesAndThumbs = new ArrayList<Map<String, Object>>();
//After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method
} else {
//The permissions are granted so Get all contacts
namesAndThumbs = new ArrayList<Map<String, Object>>();
try {
Cursor contactCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER},
null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
if (contactCursor != null) {
while (contactCursor.moveToNext()) {
long id = contactCursor.getLong(contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
InputStream inputStream = openThumbnail(id);
Bitmap thumbnail;
if (inputStream != null) {
thumbnail = BitmapFactory.decodeStream(inputStream);
} else {
thumbnail = BitmapFactory.decodeResource(getResources(), R.drawable.ic_person_black_24dp);
}
//Add contact name into the list
Map<String, Object> datum = new HashMap<String, Object>(2);
datum.put("name", contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
datum.put("thumbnail", thumbnail);
namesAndThumbs.add(datum);
}
}
} catch (NullPointerException e) {
Log.e("ContactNamesAndThumbs", e.getMessage());
}
}
return namesAndThumbs;
}
J'ai utilisé un ArrayAdapter avec le AutoCompleteTextView. Voici le code
public ContactsAdapter(Context context, List<Map<String, Object>> data) {
super(context, -1);
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.single_contact, parent, false);
TextView cName = (TextView) rowView.findViewById(R.id.tv_ContactName);
ImageView cThumb = (ImageView) rowView.findViewById(R.id.iv_contact_thumbnail);
cName.setText(data.get(position).get("name").toString());
cThumb.setImageBitmap((Bitmap) data.get(position).get("thumbnail"));
return rowView;
}
Récupère tes contacts en utilisant _AsyncTask_ – Piyush
J'ai édité mon code reflétant la réponse de @Sanoop Mais ma question principale n'a toujours pas de réponse, la chose voulue ne se passe pas. – Ali