2010-12-13 16 views
9

Chcę wyświetlać kontakty w widoku listy i dodawać akcje do wszystkich kontaktów, na przykład po kliknięciu konkretnego kontaktu powinien wyświetlić numer telefonu, identyfikator poczty i usunąć konkretny kontakt ...Android. wyświetlać kontakty jako widok listy

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

Co Cię powstrzymuje od robienia tego, co chcesz? – WarrenFaith

+0

@WarrenFaith ... próbuję wyświetlić kontakty książki telefonicznej, ale nie jestem w stanie tego zrobić ... w moim kodzie zmienna nazwa przesłania wartości hard core tylko przez jeden kontakt z książki telefonicznej .. Chcę wyświetlić wszystkie kontakty najpierw w widoku listy, a następnie dodaj akcje na nim. po prostu zobacz, gdzie brakuje mi pętli, aby to zrobić. – Datta

Odpowiedz

1

Oto mała zmiana kodu zamieszczonych przez użytkownika, będzie ona rozwiązać Twój problem.

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); 
10

Problem w aktualnym kodzie jest nowy adapter dla każdej pętli. Po prostu przenieś ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str); z do while loop. I jeszcze jeden problem, zbyt dużo pracujesz na UIThread (kursor w pętli), więc użytkownik zobaczy czarny ekran lub ANR, jeśli twoja liczba kontaktów jest ogromna. Nauczyć się korzystać AsyncQueryHandler i CursorAdapter, to wszystko w mój link i Nikki linku

A dlaczego nie spojrzeć na kontakty domyślne aplikacji w kodzie źródłowym Androida: Poniżej jest moje niestandardowe Kontakt App. enter image description here

https://github.com/android/platform_packages_apps_contacts

+4

Aby to zrobić, powinieneś zostawić powód, dla którego poparłeś moją odpowiedź. Z ogólnym pytaniem takim jak to, nie oczekuj kodu uruchamiającego kopiuj-wklej. Moja odpowiedź pomoże mu ulepszyć dostarczony kod. –