2012-01-04 13 views
5

Estoy trabajando en una aplicación en la que necesito recuperar todos los contactos del libro de contactos y mostrarlos. Quiero que el usuario seleccione algunos contactos y los agregue en un grupo que se guarda en db.Cómo mostrar los datos de la lista de Array a Custom ArrayAdapter

he creado una lista personalizada vista- contactitem.xml-

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 


android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 


<TextView 

    android:id="@+id/contactname" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:layout_weight="1" 
    android:layout_marginLeft="20dp" 
    android:ellipsize="end"   
    android:singleLine="true" 
    android:clickable="true"/> 

<TextView 
    android:id="@+id/contactnum" 
    android:layout_width="wrap_content" 
    android:textColor="@color/White" 
    android:clickable="true" 
    android:layout_gravity="center_vertical" 
    android:layout_height="wrap_content"/> 

    <Button 
    android:id="@+id/add" 
    android:layout_width="wrap_content" 
    android:layout_height="35dp" 
    android:text="@string/add_contacts" 
    android:layout_gravity="center_vertical" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:focusable="false" 
    android:focusableInTouchMode="false"/> 

</LinearLayout> 

tengo una clase SelectContact para ir a buscar los contactos de Contacto Book-

public class SelectContacts extends Activity implementsOnItemClickListener { 

    private List<Contact> list = new ArrayList<Contact>(); 
    private ListView contact_list; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.selectcontacts); 
     contact_list=(ListView)findViewById(R.id.contactsListView); 
     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
     cur.moveToFirst(); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); 
        pCur.moveToFirst(); 
        while (pCur.moveToNext()) { 
         String number=pCur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         Contact c=new Contact(); 
         c.setContactName(name); 
         c.setContactNum(number); 
         list.add(c); 
        } 
        pCur.close(); 
       } 
       ContactAdapter contactAdapter=new ContactAdapter(this, R.layout.contactitem, list); 
       contact_list.setAdapter(contactAdapter); 
      } 
     } 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     // TODO Auto-generated method stub 
    } 
} 

e implementado una costumbre adapter- ContactAdapter-

public class ContactAdapter extends ArrayAdapter<Contact>{ 

    List<Contact> items; 
    LayoutInflater mInflater ; 
    Context context; 
    int layoutResourceId; 

    public ContactAdapter(Context context, int layoutResourceId, List<Contact> items) { 
     super(context, layoutResourceId, items); 
     this.layoutResourceId=layoutResourceId; 
     this.items = items; 
     this.context=context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ViewHolder holder = new ViewHolder(); 
     if(row==null){ 
      mInflater = ((Activity)context).getLayoutInflater(); 
      row = mInflater.inflate(layoutResourceId, parent, false); 
      holder.name = (TextView) row.findViewById(R.id.contactname); 
      holder.number = (TextView) row.findViewById(R.id.contactnum); 
      holder.add=(Button)row.findViewById(R.id.add); 
      row.setTag(holder); 
     }else{ 
      holder=(ViewHolder)row.getTag(); 
     } 

     String name=items.get(position).getContactName(); 
     String number=items.get(position).getContactNum(); 
     holder.name.setText(name); 
     holder.number.setText(number); 
     holder.add.setText("Add"); 
     return row; 
    } 

    static class ViewHolder{ 
     TextView name; 
     TextView number; 
     Button add; 
    } 
} 

aquí Contacto es un simple POJO-

public class Contact { 
    private String contactName; 
    private String contactNum; 

    public String getContactName() { 
     return contactName; 
    } 
    public void setContactName(String contactName) { 
     this.contactName = contactName; 
    } 

    public String getContactNum() { 
     return contactNum; 
    } 
    public void setContactNum(String contactNum) { 
     this.contactNum = contactName; 
    } 

} 

soy un novato en Android ..

Aquí cuando inicio la actividad SelectContact no puede mostrar de contacto en la interfaz de usuario .. por favor me ayude chicos ...

Gracias

Respuesta

5

I insistirá en que use List<Contact> list = new ArrayList<Contact>(); en lugar de usar ArrayList<HashMap<String, Contact>> list= new ArrayList<HashMap<String, Contact>>();

Solo necesita recuperar los datos de contacto y establecer los valores en la clase Contact y agregar al objeto ArrayList. Y luego simplemente pase la lista Objeto a la clase ArrayAdapter y úselo. Esta es la forma más fácil, lo estás haciendo un poco complejo usando HashMap en este caso.

+1

Bro he cambiado el Código pero todavía no recibo nada. Depuré la Clase SelectContact. Aquí está buscando nombres pero no puede recuperar los números ... –

+0

, por lo que está obteniendo los nombres en la lista, pero no los números, ¿es así? –

+0

no .. quiero decir que hago un brindis en el bucle para mostrar el número ... bt no muestra nada ... creo que el flujo no está llegando en el pCur Loop .. –

Cuestiones relacionadas