주소록그룹을 가지고와서
ListView로 나타내는 부분입니다.
SimpleCursorAdapter를 이용하면 그룹명이 나오는데
ArrayAdapter를 사용하면 왜 안나오는 것일까요.. 궁금합니다. ㅜ
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 GroupList 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);
getGroupCursor(this);
groupAdapter = new GroupList(this, R.layout.addresschildview, groupList);
setListAdapter(groupAdapter);
}
private static final String[] GROUP = new String[]{
ContactsContract.Groups._ID,
ContactsContract.Groups.TITLE,
};
/**
*그룹가지고 와서 ArrayList에 넣기.
* @param context
* @return
*/
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());
}
}
/**
* 그룹별 카운트 얻기
* @param context
* @param mcursor
* @return
*/
private Cursor getGroupCount(Context context, Cursor mcursor) {
Cursor cursor = context.getContentResolver().query(ContactsContract.Groups.CONTENT_SUMMARY_URI,
new String[]{ContactsContract.Groups.SUMMARY_COUNT}, ContactsContract.Groups._ID + " = " + mcursor.getLong(0), null, null);
return cursor;
}
/**
* 그룹ID별 카운팅수
* @param _context
* @param _Cursor
* @return
*/
private int getGroupCounts(Context _context, Cursor _Cursor){
int count = 0;
Cursor cursor = _context.getContentResolver().query(ContactsContract.Groups.CONTENT_SUMMARY_URI,
new String[]{ContactsContract.Groups.SUMMARY_COUNT},
ContactsContract.Groups._ID + " = " + _Cursor.getLong(0), null, null);
if(cursor.moveToFirst()){
count = cursor.getInt(0);
}
return count;
}
/**
* 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)v.findViewById(R.id.txtAddressChildViewGroupId);
TextView groupTitle = (TextView)v.findViewById(R.id.txtAddressChildViewGroupTitle);
if(groupId != null){
groupId.setText(group.getId());
}
if(groupTitle != null){
groupTitle.setText(group.getGroupTitle());
}
}
return v;
}
}
}
getView에서 보면
if(v == null){
LayoutInflater vi =
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(R.layout.addresschildview, null);
}
이렇게 되어있는데
vi.inflate하면 받아주는 넘이 있어야 하는거 아닌가요?
v=vi.inflate...
근데 널포인터 안나오는게 신기한데요...