2012-01-04 5 views
5

연락처 북에서 모든 연락처를 가져와 표시해야하는 응용 프로그램에서 작업하고 있습니다. 사용자가 일부 연락처를 선택하고 db에 저장된 그룹에 추가하길 원합니다.배열 목록의 데이터를 사용자 지정 ArrayAdapter에 표시하는 방법

난 사용자 지정 목록을 만든

보기 - 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> 

내가 연락에서 연락처를 가져 오는을위한 SelectContact 클래스

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- 및 사용자 정의를 구현 한 어댑터 - 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; 
    } 
} 

여기의 연락처는 간단한 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; 
    } 

} 

나는 안드로이드에 초보자입니다 .. 나는 그것이 UI에 연락처를 표시 할 수 없습니다 SelectContact 활동을 시작 여기

.. 나에게 사람들을 도와주세요 ...

감사

답변

5

I List<Contact> list = new ArrayList<Contact>(); 대신 사용 하시길 바랍니다 ArrayList<HashMap<String, Contact>> list= new ArrayList<HashMap<String, Contact>>();

연락처 세부 정보를 가져 와서 Contact 클래스로 값을 설정하면됩니다. ArrayList 개체에 추가하십시오. 그리고 ObjectAdapter 클래스에리스트를 전달하고 사용하십시오. 이것은 가장 쉬운 방법입니다.이 경우에는 HashMap을 사용하여 약간 복잡하게 만듭니다.

+1

나는 코드를 변경했지만 여전히 아무것도 얻지 못한다. 나는 SelectContact 클래스를 디버깅했다. 여기에서는 이름을 가져 오지만 숫자를 검색 할 수는 없습니다. –

+0

그래서 숫자가 아닌 목록에 이름이 나타납니다. 그렇습니까? –

+0

아니 .. 나는 그 번호를 팝업 루프에 축배를 말하고 말은 .. 어떤 일이 표시되지 않습니다 .. 나는 흐름이 pCur 루프에 도달하지 않는 것 같아요 .. –

관련 문제