안드로이드 개발 질문/답변
(글 수 45,052)
아래가 주소록 그룹으로 나타내기 소스단입니다.
커서로 주소록 그룹id와 그룹명을 얻어와
그것을 ArrayList로 담고
ArrayAdapter로 ListView에 나타내는 소스입니다.
테스트하기가 정말 힘드네요.. ArrayList에 담지않고
커서를 SimpleCursorAdapter로 나타내면결과가 나옵니다.
ArrayList로 담아서 ArrayAdapter로 나타내면 왜 안될까요..ㅜ
ArrayList로 담는 이유는 나중에 List에 대한 처리를 좀더 편하게 하기 위함입니다.
layout파일은 따로 올리지는 않겠습니다..(어차피 별 상관없으니....)
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class GroupActivity extends ListActivity {
private static ArrayList<Group> groupList;
private ArrayAdapter<Group> groupAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.address);
groupList = new ArrayList<Group>();
//ListView lv = (ListView)findViewById(R.id.listAddrList);
groupAdapter = new ArrayAdapter<Group>(this, R.layout.addresschildview, groupList);
setListAdapter(groupAdapter);
}
/**
* 그룹ID얻기
* @param context
* @return
*/
private static final String[] GROUP = new String[]{
ContactsContract.Groups._ID,
ContactsContract.Groups.TITLE,
};
private void getGroupCursor(Context context){
Cursor cursor = context.getContentResolver().query(ContactsContract.Groups.CONTENT_URI, new String[]{ContactsContract.Groups.TITLE,},
ContactsContract.Groups.DELETED + " = 0" + " AND " + ContactsContract.Groups.GROUP_VISIBLE + " = 1",
null, null);
int id = cursor.getColumnIndexOrThrow(ContactsContract.Groups._ID);
int title = cursor.getColumnIndexOrThrow(ContactsContract.Groups.TITLE);
Log.i("GETGROUPCURSOR", "**CURSOR BEGIN***" +cursor.getCount()+" " + cursor.getColumnCount());
if(cursor.moveToFirst()){
do{
int groupId = cursor.getInt(id);
String groupTitle = cursor.getString(title);
groupList.add(new Group(groupId, groupTitle));
}while(cursor.moveToNext());
}
}
/**
* ArrayAdapter 구현 클래스
*
*/
public class GroupList extends ArrayAdapter<Group>{
private ArrayList<Group> items;
public GroupList(Context context, int textViewResourceId,
ArrayList<Group> item) {
super(context, textViewResourceId, item);
this.items = item;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null){
LayoutInflater vi =
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(R.layout.addresschildview, null);
}
Group group = items.get(position);
if(group != null){
TextView groupId = (TextView)findViewById(R.id.txtAddressChildViewGroupId);
TextView groupTitle = (TextView)findViewById(R.id.txtAddressChildViewGroupTitle);
if(groupId != null){
groupId.setText(group.getId());
}
if(groupTitle != null){
groupTitle.setText(group.getGroupTitle());
}
}
return v;
}
}
public class Group{
private String groupTitle;
private int id;
public Group(int id, String groupTitle) {
super();
this.groupTitle = groupTitle;
this.id = id;
}
public String getGroupTitle() {
return groupTitle;
}
public void setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
}
커서로 주소록 그룹id와 그룹명을 얻어와
그것을 ArrayList로 담고
ArrayAdapter로 ListView에 나타내는 소스입니다.
테스트하기가 정말 힘드네요.. ArrayList에 담지않고
커서를 SimpleCursorAdapter로 나타내면결과가 나옵니다.
ArrayList로 담아서 ArrayAdapter로 나타내면 왜 안될까요..ㅜ
ArrayList로 담는 이유는 나중에 List에 대한 처리를 좀더 편하게 하기 위함입니다.
layout파일은 따로 올리지는 않겠습니다..(어차피 별 상관없으니....)
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class GroupActivity extends ListActivity {
private static ArrayList<Group> groupList;
private ArrayAdapter<Group> groupAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.address);
groupList = new ArrayList<Group>();
//ListView lv = (ListView)findViewById(R.id.listAddrList);
groupAdapter = new ArrayAdapter<Group>(this, R.layout.addresschildview, groupList);
setListAdapter(groupAdapter);
}
/**
* 그룹ID얻기
* @param context
* @return
*/
private static final String[] GROUP = new String[]{
ContactsContract.Groups._ID,
ContactsContract.Groups.TITLE,
};
private void getGroupCursor(Context context){
Cursor cursor = context.getContentResolver().query(ContactsContract.Groups.CONTENT_URI, new String[]{ContactsContract.Groups.TITLE,},
ContactsContract.Groups.DELETED + " = 0" + " AND " + ContactsContract.Groups.GROUP_VISIBLE + " = 1",
null, null);
int id = cursor.getColumnIndexOrThrow(ContactsContract.Groups._ID);
int title = cursor.getColumnIndexOrThrow(ContactsContract.Groups.TITLE);
Log.i("GETGROUPCURSOR", "**CURSOR BEGIN***" +cursor.getCount()+" " + cursor.getColumnCount());
if(cursor.moveToFirst()){
do{
int groupId = cursor.getInt(id);
String groupTitle = cursor.getString(title);
groupList.add(new Group(groupId, groupTitle));
}while(cursor.moveToNext());
}
}
/**
* ArrayAdapter 구현 클래스
*
*/
public class GroupList extends ArrayAdapter<Group>{
private ArrayList<Group> items;
public GroupList(Context context, int textViewResourceId,
ArrayList<Group> item) {
super(context, textViewResourceId, item);
this.items = item;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null){
LayoutInflater vi =
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(R.layout.addresschildview, null);
}
Group group = items.get(position);
if(group != null){
TextView groupId = (TextView)findViewById(R.id.txtAddressChildViewGroupId);
TextView groupTitle = (TextView)findViewById(R.id.txtAddressChildViewGroupTitle);
if(groupId != null){
groupId.setText(group.getId());
}
if(groupTitle != null){
groupTitle.setText(group.getGroupTitle());
}
}
return v;
}
}
public class Group{
private String groupTitle;
private int id;
public Group(int id, String groupTitle) {
super();
this.groupTitle = groupTitle;
this.id = id;
}
public String getGroupTitle() {
return groupTitle;
}
public void setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
}




findViewById 하실때여 v.findViewById 로 해보세요.