public class ContactAdapter : BaseAdapter<ContactItem>, ActivityCompat.IOnRequestPermissionsResultCallback
{
private static int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
public List<ContactItem> _contactList;
public List<ContactItem> _filterContactList;
Activity context = null;
public ContactAdapter(Activity context, string keySearch) : base ()
{
this.context = context;
if(_contactList?.Count == 0 || string.IsNullOrEmpty(keySearch))
{
FillContacts();
}
else
{
_filterContactList = _contactList.Where(x => x.Name.ToUpper().Contains(keySearch.ToUpper()) ||
x.Number.Trim().Replace("(", "").Replace(")", "").Replace("-", "").Contains(keySearch)).OrderBy(x => x.Name).ToList();
}
}
public override ContactItem this[int position]
{
get { return _filterContactList[position]; }
}
public override int Count
{
get { return _filterContactList != null ? _filterContactList.Count : 0; }
}
public override long GetItemId(int position)
{
return _filterContactList[position].Id;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = _filterContactList[position];
if (convertView == null)
convertView = context.LayoutInflater.Inflate(Resource.Layout.ContactsItem, null);
convertView.FindViewById<TextView>(Resource.Id.txtName).Text = item.Name;
convertView.FindViewById<TextView>(Resource.Id.txtNumber).Text = item.Number;
return convertView;
}
public void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
{
if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS)
{
if (grantResults[0] == Permission.Granted)
{
// Permission is granted
FillContacts();
}
else
{
Toast.MakeText(this.context, "Vui lòng check lại quyền truy cập danh bạ!", ToastLength.Long).Show();
}
}
}
void FillContacts()
{
_contactList = new List<ContactItem>();
_filterContactList = new List<ContactItem>();
ContentResolver resolver = context.ContentResolver;
Uri uri = ContactsContract.CommonDataKinds.Phone.ContentUri;
string[] projection = new string[] {ContactsContract.CommonDataKinds.Phone.InterfaceConsts.DisplayName,
ContactsContract.CommonDataKinds.Phone.Number};
ICursor people = resolver.Query(uri, projection, null, null, null);
int indexName = people.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.DisplayName);
int indexNumber = people.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number);
if (people.MoveToFirst())
{
do
{
string name = people.GetString(indexName);
string number = people.GetString(indexNumber);
_contactList.Add(new ContactItem
{
Name = people.GetString(indexName),
Number = people.GetString(indexNumber)
});
// Do work...
} while (people.MoveToNext());
}
_filterContactList = _contactList.OrderBy(x => x.Name).ToList();
}
}
Monday, December 4, 2017
[Android-Xamarin] Get contacts info
Subscribe to:
Post Comments (Atom)
No comments:
Write comments