9

リストビューで連絡先を表示し、すべての連絡先にアクションを追加したい.特定の連絡先をクリックすると、電話番号、メール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());

        }
4

3 に答える 3

10

現在のコードの問題は、ループごとに新しいアダプターを作成することです。から移動ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str); するだけですdo while loop。また、もう1つの問題は、作業が多すぎるUIThread(カーソルをループする)ため、連絡先の数が多い場合、ユーザーに黒い画面またはANRが表示されることです。使い方AsyncQueryHandlerを学びCursorAdapter、それはすべて私のリンクとニッキのリンクにあります

そして、Androidソースコードのデフォルトの連絡先アプリを見てみませんか。以下は私のカスタム連絡先アプリです。ここに画像の説明を入力してください

https://github.com/android/platform_packages_apps_contacts

于 2012-08-12T11:26:44.543 に答える
3

以下のリンクを見て、このコードを使用して、Android 電話帳に保存されている連絡先をアプリケーションに表示してみてください。

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

于 2010-12-13T09:57:10.553 に答える
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);
于 2011-09-27T09:42:27.760 に答える