2011-02-14 1 views
3

휴대 전화 연락처를 사진, 이름 및 번호와 함께 표시해야하는 앱을 만들고 있습니다. ListView를 만들었고 일반 사진과 함께 연락처와 숫자를 표시 할 수 있지만 contat의 그림을 표시 할 수는 없습니다. 이것은 내 코드입니다. Android : 이름과 번호로 ListView에서 연락처 사진 설정

Cursor cursor = getContacts(); 

String[] fields = new String[] {Contacts.DISPLAY_NAME, Phone.NUMBER}; 

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor, 
      fields, new int[] {R.id.contactEntryText, R.id.contactEntryNumber}); 

mContactList.setAdapter(adapter); 

private Cursor getContacts() 

    // Run query 
    Uri uri = Phone.CONTENT_URI; 
    String[] projection = new String[] { 
      Contacts._ID, 
      Contacts.DISPLAY_NAME, 
      Phone.NUMBER, 
      Contacts.PHOTO_ID 

    }; 
    //String selection = Contacts.HAS_PHONE_NUMBER + "='1'"; 
    String selection = null; 
    String[] selectionArgs = null; 
    String sortOrder = Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 

연락처의 그림을 SimpleCursorAdapter에 첨부하려면 어떻게해야합니까? 다른가요?

대단히 감사합니다.

답변

2

나는 그것을 알아 냈다. 나는 그것이 매우 알고

public class MySimpleCursorAdapter extends SimpleCursorAdapter { 

    ... 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     ImageView imageView = (ImageView) view.findViewById(R.id.Foto); 

     int id = cursor.getColumnIndex(Phones.PERSON_ID); 
     Uri uri = ContentUris.withAppendedId(Phones.CONTENT_URI, cursor.getLong(id)); 
     String uriPhoto = uri.toString(); 
     String uriPeople = uriPhoto.replace("phones", "people"); 

     Uri uriFinal = Uri.parse(uriPeople); 

     Bitmap bitmap = People.loadContactPhoto(context, uriFinal, R.drawable.avatar02, null); 
     imageView.setImageBitmap(bitmap); 
     super.bindView(view, context, cursor); 
    } 
} 
+0

안녕하세요 Racker, 어떻게 XML을 만들었습니까? ImageView (사진) 및 TextViews (이름 및 번호)에 대한 별도의 파일이 있었습니까? 모든 뷰를 어떻게'ListView'에 연결했는지 알고 싶습니다. 'Activity'에서'ListView'를 가져 오는 프래그먼트를 사용하고 있지만 별도의 XML 파일에는 행의 내용 (사진, 이름, 번호)이 있으므로 3 개의 XML이 함께 있습니다. 모든지도 감사, 감사합니다. – Azurespot

0

:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Cursor names = getNamesAndPictures(); 
    names.moveToFirst();   
    ListAdapter adapter = new MySimpleCursorAdapter(this, R.layout.contacts, 
       names, new String[] {Phones.NAME, Phones.NUMBER}, new int[] { 
       R.id.Nombre, R.id.Numero}); 
    setListAdapter(adapter); 
    startManagingCursor(names); 
    Log.i(DEBUG_TAG, "Mi numero: " + miNumeroTelefono());   
} 

public Cursor getNamesAndPictures(){ 
    String[] projection = new String[] { 
      Phones.NUMBER, 
      Phones.PERSON_ID, 
      People.NAME, 
      People._ID 
    }; 
    String selection = Phones.NAME + "!='null'"; 
    String sortOrder = Phones.NAME + " COLLATE LOCALIZED ASC"; 
    Cursor cursor = managedQuery(Phones.CONTENT_URI, projection, selection, null, sortOrder); 
    return cursor; 
} 

사용자 정의 어댑터에서 : ListActivity 확장하는 활동에

: 사람이 같은 문제를 가지고 있다면, 이것은 내가 그것을 어떻게입니다 낡은 질문이지만이 솔루션의 몇 가지 사항이 이제는 더 이상 사용되지 않아서 대답이되었습니다. 비슷한 해결책을 찾고있는 동안 검색에서 질문이 나타 났으므로 여기에 두 개의 센트를 추가하겠습니다.

ContactsContract의 이름과 사진으로 간단한 연락처 목록을 만들었습니다. 내 대답을 확인하십시오 ... https://stackoverflow.com/a/37710199/1209544