2010-12-13 5 views
9

Ich mag Anzeigen Kontakte in der Listenansicht und fügen Sie Aktionen auf allen Kontakten, wie auf Klick zum Anzeigen auf einem bestimmten Kontakt soll die Telefonnummer, E-Mail-ID anzeigen und löschen den jeweiligen Kontakts ...Android. Kontakte als Listenansicht

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

Was Sie zurück zu tun, halten, was Sie wollen? – WarrenFaith

+0

@WarrenFaith ... ich versuche, die Telefonbuchkontakte anzuzeigen, aber ich bin dazu nicht in der Lage ... in meinem Code überschreibt die Namensvariable die harten Kernwerte durch nur einen Kontakt aus dem Telefonbuch .. ich möchte anzeigen Aktionen hinzufügen auf sie alle Kontakte zuerst in der Listenansicht und dann .. nur sehen, wo ich die Schleifen bin fehlt, das zu tun .. – Datta

Antwort

1

Hier ist eine kleine Änderung an den Code von Ihnen geschrieben, es wird Ihr Problem lösen.

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

Das Problem in Ihrem aktuellen Code ist neue Adapter für jede Schleife erstellen. Bewegen Sie einfach ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str); aus do while loop. Und ein weiteres Problem, arbeiten Sie zu viel auf UIThread (Schleife durch Cursor) so Benutzer einen schwarzen Bildschirm oder ANR sehen, ob Ihre Zahlen Kontakt riesig. Erfahren AsyncQueryHandler und CursorAdapter zu verwenden, es ist alles in meinem Link und Nikkis Link

Und warum nicht tun haben Sie einen Blick auf Standard-Kontakte-App in Android-Quellcode: Unten ist meine benutzerdefinierten Kontakte App. enter image description here

https://github.com/android/platform_packages_apps_contacts

+4

um downvoter, Sie sollten einen Grund verlassen, warum Sie meine Antwort downvote. Bei einer allgemeinen Frage wie dieser erwarten Sie kein Copy-Paste-Lauf-Snippet. Meine Antwort hilft ihm, seinen bereitgestellten Code zu verbessern. –