2010-12-13 14 views
9

Quiero mostrar contactos en la vista de lista y agregar acciones en todos los contactos, como al hacer clic en un contacto en particular, debe mostrar el número de teléfono, ID de correo y eliminar el contacto en particular ...Android. para mostrar contactos como vista de lista

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

¿Cuál te detiene de hacer lo que quiere? – WarrenFaith

+0

@WarrenFaith ... estoy tratando de mostrar los contactos de la agenda pero no puedo ... en mi código, la variable de nombre está anulando los valores básicos por solo un contacto de la guía telefónica. Quiero mostrar todos los contactos primero en la vista de lista y luego agregar acciones en él ... solo ver donde me faltan los bucles para hacer eso ... – Datta

Respuesta

1

Aquí hay un pequeño cambio en el código enviado por usted, que va a resolver su problema.

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

El problema en su código actual es crear un nuevo adaptador para cada ciclo. Solo mueva ArrayAdapter arr = new ArrayAdapter(this, android.R.layout.simple_list_item_1,str); fuera de do while loop. Y otro problema, trabajas demasiado en UIThread (cursor en el cursor) para que el usuario vea una pantalla negra o ANR si tus números de contacto son enormes. Aprender a usar AsyncQueryHandler y CursorAdapter, todo está en mi enlace y el enlace de Nikki

Y ¿por qué no echar un vistazo a la aplicación Contactos defecto en el código fuente de Android: A continuación es mi costumbre aplicación Contactos. enter image description here

https://github.com/android/platform_packages_apps_contacts

+4

Para el que menosprecia, debe dejar una razón por la que rechazó mi respuesta. Con una pregunta general como esta, no espere un fragmento de ejecución de copiar y pegar. Mi respuesta lo ayudó a mejorar su código provisto. –

Cuestiones relacionadas