2012-01-04 13 views
5

Tüm kişileri rehberden ve ekrandan getirmem gereken bir uygulama üzerinde çalışıyorum. Kullanıcının bazı kişileri seçmesini ve db'ye kaydedilmiş bir gruba eklemesini istiyorum.Array listesinden Özel ArrayAdapter verilerine nasıl veri gösterileceği

i özel bir liste oluşturduk

view- 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> 

i kişisinin kişileri alma için bir SelectContact sınıfı

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 
    } 
} 

Book- ve özel bir uygulamaya sahip Adaptörü-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; 
    } 
} 

burada İletişim basit POJO-

olduğunu
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; 
    } 

} 

i android bir acemi değilim .. ben UI üzerindeki teması gösteremez SelectContact etkinliği başlatmak İşte

.. Bana adamlar yardım lütfen ...

Teşekkür

cevap

5

ben ArrayList<HashMap<String, Contact>> list= new ArrayList<HashMap<String, Contact>>();

Yerine List<Contact> list = new ArrayList<Contact>();'u kullanmakta ısrar edeceksiniz Sadece İletişim bilgilerini almanız ve değerleri Contact Sınıfına ayarlamanız gerekiyor ve ArrayList nesnesine ekleyin. Ve sonra sadece listeyi ArrayAdapter sınıfına geçirin ve kullanın. Bu en kolay yol, bu durumda HashMap kullanarak biraz karmaşık hale getiriyorsunuz.

+1

Kod'u değiştirdim ve hala hiçbir şey almadım .. SelectContact Class'ta hata ayıkladım. Burada isimleri getiriyor ama sayıları alamıyor .. –

+0

böylece isimleri listede değil, sayıları alıyorsunuz, öyle mi? –

+0

no .. demek demek istediğim, sayının içine bir tost ekledim. Bt, herhangi bir şey görüntülemiyor .. pCur Loop'ta akışa ulaşmadığını düşünüyorum .. –

İlgili konular