안드로이드 개발 정보
(글 수 77)
금요일 진종일 찾아도 못 찾다가, 질문 올리고 나니 금방 해결되네요 ㅋㅋㅋ
*사파리에서 코드 하이라이터가 이상해서 그냥 텍스트로 붙여 넣습니다.
main.xml
// 메인에는 ListView 하나만 붙여넣고요
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
view_friend_list.xml
// ListView 안에 들어가는 한 row를 꾸미는 겁니다
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:padding="3dp">
<ImageView
android:id="@+id/photo"
android:layout_width="40dp"
android:layout_height="40dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_photo"/> // ic_photo는 얼굴없을 때 사용할 사진
<TextView
android:id="@+id/name"
android:layout_marginLeft="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/phone"
android:layout_marginLeft="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
AndroidManifest.xml
// 퍼미션은 이거하나만 넣어주면 돼요
<uses-permission android:name="android.permission.READ_CONTACTS"/>
Home.java
import java.io.InputStream;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ResourceCursorAdapter;
import android.widget.TextView;
public class Home extends Activity
{
private ListView lv;
static final String[] field = new String[] {
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.PHOTO_ID,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.list);
Cursor c = getContentResolver().query(Contacts.CONTENT_URI, field, null,
null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.view_friend_list, c);
lv.setAdapter(adapter);
}
// 어댑터를 커스터마이징한다.
private final class ContactListItemAdapter extends ResourceCursorAdapter {
public ContactListItemAdapter(Context context, int layout, Cursor c) {
super(context, layout, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ContactListItemCache cache = (ContactListItemCache) view.getTag();
TextView nameView = cache.nameView;
TextView phoneView = cache.phoneView;
ImageView photoView = cache.photoView;
// 이름 표시
int nameIdx = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String name = cursor.getString(nameIdx);
nameView.setText(name);
// 번호 표시
int phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String phone = cursor.getString(phoneIdx);
phoneView.setText(phone);
// 사진 표시
ContentResolver cr = getContentResolver();
int contactId_idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
Long contactId = cursor.getLong(contactId_idx);
Log.e("###", contactId_idx+" | "+contactId+ " | "+name);
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
// 사진없으면 기본 사진 보여주기
if (input != null)
{
Bitmap contactPhoto = BitmapFactory.decodeStream(input);
photoView.setImageBitmap(contactPhoto);
}
else
{
photoView.setImageDrawable(getResources().getDrawable(R.drawable.ic_photo));
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = super.newView(context, cursor, parent);
ContactListItemCache cache = new ContactListItemCache();
cache.nameView = (TextView) view.findViewById(R.id.name);
cache.phoneView = (TextView) view.findViewById(R.id.phone);
cache.photoView = (ImageView) view.findViewById(R.id.photo);
view.setTag(cache);
return view;
}
}
final static class ContactListItemCache {
public TextView nameView, phoneView;
public ImageView photoView;
}
}
그렇다면! 나뉘어져있는 구릅별로 뽑아올수도 있나요?ㅎㅎ