I am displaying a list of all phone book contacts using ImageCell in my Xamarin android application.
The list shows contact image, contact name and contact number. All of the information is displayed correctly but as soon as I scroll down, all of the contact images disappears and is never reloaded unless and until I rerun the application.
Below is the code to get all contacts:
var contactList = new List < ContactsModel > ();
var ContactDetailURI = ContactsContract.Contacts.ContentUri;
string[] ContactDetailProjection = {
ContactsContract.Contacts.InterfaceConsts.DisplayName,
ContactsContract.Contacts.InterfaceConsts.PhotoId,
//ContactsContract.Contacts.InterfaceConsts.PhotoThumbnailUri
};
var ContactDetailCursor = Forms.Context.ContentResolver.Query(ContactDetailURI, ContactDetailProjection, null, null, null);
if (ContactDetailCursor.MoveToFirst()) {
do {
var imageURI = Android.Net.Uri.Parse(new System.Uri(ContactDetailCursor.GetString(ContactDetailCursor.GetColumnIndex(ContactDetailProjection[1]))).ToString());
var stream = Android.App.Application.Context.ContentResolver.OpenInputStream(imageURI);
var imageSource = Xamarin.Forms.ImageSource.FromStream(() => stream);
var contact = new ContactsModel();
contact.DisplayName = ContactDetailCursor.GetString(ContactDetailCursor.GetColumnIndex(ContactDetailProjection[0]));
contact.PhotoId = imageSource;
contactList.Add(contact);
} while (ContactDetailCursor.MoveToNext());
}
return contactList;
Below is the XAML code for the page which will display all contacts:
<ContentPage.Content>
<ListView x:Name="ContactList">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell
Text="{Binding DisplayName}"
Detail="{Binding PhoneNumber}"
ImageSource="{Binding PhotoId}">
</ImageCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
P.S. I am not using any type pf component or package.