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()); } 

  • 设置从Adapter中选中的ListView项
  • Android:获取列表视图中可见子项的计数
  • 列表视图项向左滑动并向右滑动?
  • 为什么ListView.getCheckedItemPositions()不能返回正确的值?
  • 如何在ListView上更改颜色和字体
  • 无法使用自定义适配器单击ListView中的项目
  • RobolectrictestingListView在适配器中的值更改之后不会更新
  • checkbox自动调用ListView滚动时onCheckedChange?
  • 当前代码中的问题是为每个循环创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);