Android系统。 将联系人显示为列表视图

我想在列表视图中显示联系人,并添加所有联系人的行动,如点击一个特定的联系人,它应该显示电话号码,邮件编号和删除特定的联系人…

import android.app.ListActivity; import android.content.ContentResolver; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class CPDemo1 extends ListActivity { @SuppressWarnings("unchecked") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String str[]= {"datta","vivek","Nagesh sir","shiv"}; String name; ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); int nameIdx = cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME); if (cursor.moveToFirst()) do { int x = 0; name = cursor.getString(nameIdx); str[x]= name; x++; ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str); setListAdapter(arr); } while(cursor.moveToNext()); } 

Solutions Collecting From Web of "Android系统。 将联系人显示为列表视图"

当前代码中的问题是为每个循环创build新的适配器。 只要移动ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str); do while loop 。 另一个问题,你工作太多UIThread (通过光标循环),所以用户将看到一个黑色的屏幕或ANR,如果你的联系人数量巨大。 学习使用AsyncQueryHandlerCursorAdapter ,这一切都在我的链接和nikki的链接

为什么你不看看Android源代码中的默认联系人应用程序:下面是我的自定义联系人应用程序。 在这里输入图像说明

https://github.com/android/platform_packages_apps_contacts

只需看看下面的链接,并尝试使用此代码显示在Android电话簿中保存的联系人到您的应用程序。

http://developer.android.com/resources/samples/ContactManager/index.html

这里是你发布的代码的一点点改变,它会解决你的问题。

 if (cursor.moveToFirst()) { int x = 0; do { name = cursor.getString(nameIdx); Log.d("CONTENT",name); str[x]= name; x++; } while(cursor.moveToNext()); ArrayAdapter<String> arr = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1,str); setListAdapter(arr);