Я новичок в android, я хочу, чтобы получать контакты и отображать их в виде списка. Вот код i, чтобы получить контакты в asynctask.please, чтобы помочь обновить просмотр списка после извлечения каждого контакта.Как обновить listview в onProgressUpdate()
protected Void doInBackground(Void... params) {
ContentResolver cr = ReadContactsActivity.this.getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phone = pCur.getString(
pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
//li.add("Name:"+name+",Number:"+phone);
publishProgress("Name:"+name+",Number:"+phone);
}
pCur.close();
}
}
}
return null;
}
// A callback method executed on UI thread, invoked by the publishProgress()
// from doInBackground() method
@Override
protected void onProgressUpdate(String... values) {
list=(ListView) findViewById(R.id.lvDisplay);
ArrayAdapter<String> adp=new ArrayAdapter<String>
(getBaseContext(),R.layout.list,R.id.label,li);
list.setAdapter(adp);
}
этот код не сообщает Адаптеру, что он должен использовать список имен. Я предлагаю использовать 'adapter.add (значения [0]); adapter.notifyDataSetChanged(); 'in onProgressUpdate – Dodge
Фактически, поскольку адаптер использует имена ArrayList, мы можем просто добавить имя в arraylist и попросить адаптер обновить. –
ОК, но вам все равно нужно добавить 'names = new ArrayList();' :) –
Dodge