我想在列表视图中显示联系人并在所有联系人上添加操作,例如点击特定联系人时应显示电话号码,邮件ID和删除特定联系人...
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());
}
答案 0 :(得分:10)
当前代码中的问题是为每个循环创建新的适配器。只需将ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str);
移出do while loop
即可。另一个问题是,你在UIThread
(循环光标)上工作太多,因此如果您的联系人数量巨大,用户将会看到黑屏或ANR。学习使用AsyncQueryHandler
和CursorAdapter
,这些都在我的链接和nikki的链接中
为什么不看看Android源代码中的默认联系人应用: 以下是我的自定义联系人应用。
答案 1 :(得分:3)
只需查看下面的链接,尝试使用此代码将保存在Android手机本中的联系人显示到您的应用程序中。
http://developer.android.com/resources/samples/ContactManager/index.html
答案 2 :(得分:1)
以下是您发布的代码的一些变化,它将解决您的问题。
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);