[언어] Android
SimpleCursorAdapter
재돌쓰
2015. 2. 20. 14:28
getView(int position, View convertView, ViewGroup parent)
에서는 내부적으로 newView를 호출후 bindView를 호출함.
처음 기동시 보여지는 리스트는
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): newView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
라고 출력후 스크롤시에는
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
D/HANJA ( 7396): bindView---------------------------------------------
즉 newView로 1회 화면 bind가 필요함.
package kr.co.kimjaehyun.Hanja;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class CustomList extends SimpleCursorAdapter {
private final String logTag = "HANJA";
private Context context;
private LayoutInflater inflater;
private int layout;
public CustomList(Context context, int layout, Cursor c, String[] from,int[] to) {
super(context, layout, c, from, to);
// TODO Auto-generated constructor stub
this.context = context;
this.layout = layout;
//inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater = LayoutInflater.from(context);
}
static class ViewHolder{
TextView txt;
TextView base_txt;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
//super.bindView(view, context, cursor);
Log.d(logTag,"bindView---------------------------------------------");
String txt = cursor.getString(1);
TextView txtView= (TextView) view.findViewById(R.id.custom_list_txt);
if(txtView!=null){
txtView.setText(txt);
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// TODO Auto-generated method stub
//return super.newView(context, cursor, parent);
Log.d(logTag,"newView---------------------------------------------");
ViewHolder holder;
View convertView = inflater.inflate(layout,parent,false);
Cursor cursor1 = getCursor();
String txt = cursor1.getString(1);
TextView txtView= (TextView) convertView.findViewById(R.id.custom_list_txt);
if(txtView!=null){
txtView.setText(txt);
}
return convertView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//bindView
//newView
/*
ViewHolder holder;
if(convertView == null){
Log.d(logTag," Cursor 1---------------------------------------------");
convertView = inflater.inflate(layout,parent,false);
holder = new ViewHolder();
holder.txt = (TextView) convertView.findViewById(R.id.custom_list_txt);
holder.base_txt = (TextView) convertView.findViewById(R.id.custom_list_base_txt);
}else{
Log.d(logTag," Cursor 2---------------------------------------------");
holder = (ViewHolder) convertView.getTag();
}
Cursor cursor = getCursor();
try{
//Log.d(logTag,"Cursor["+position+"]");
//for(int i=0;i<cursor.getColumnCount();i++){
// Log.d(logTag," Cursor["+i+"]: "+cursor.getString(i));
//}
Log.d(logTag," Cursor["+position+"]: "+cursor.getString(1));
holder.txt.setText(cursor.getString(1));
}catch(Exception e){
Log.d(logTag,"Cursor ERROR: "+position);
}
*/
//Log.d(logTag,"Cursor : "+cursor.getCount());
/*
ViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(layout,parent,false);
holder = new ViewHolder();
holder.txt = (TextView) convertView.findViewById(R.id.custom_list_txt);
holder.base_txt = (TextView) convertView.findViewById(R.id.custom_list_base_txt);
}else{
holder = (ViewHolder) convertView.getTag();
}
Cursor cursor = getCursor();
int nameCol = cursor.getColumnIndex("txt");
String name = cursor.getString(nameCol);
Log.d(logTag,"Cursor : "+nameCol+" : "+name);
*/
//holder.txt.setText(cursor.getColumnIndex("txt"));
//holder.base_txt.setText(cursor.getColumnIndex("base_txt"));
/*
Cursor cursor = getCursor();
ViewInflate inflate = ViewInflate.from(context);
View v = inflate.inflate(layout, parent, false, null);
TextView titleControl = (TextView) v.findViewById(R.id.title);
if (titleControl != null) {
int index = cursor.getColumnIndex(TrafficData.Strings.TITLE);
String title = cursor.getString(index);
titleControl.setText(title);
}
TextView descriptionControl = (TextView) v
.findViewById(R.id.description);
if (descriptionControl != null) {
int index = cursor.getColumnIndex(TrafficData.Strings.DESCRIPTION);
String description = cursor.getString(index);
descriptionControl.setText(description);
}
ImageView typeControl = (ImageView) v.findViewById(R.id.type);
if (typeControl != null) {
int index = cursor.getColumnIndex(TrafficData.Strings.TYPE);
int type = cursor.getInt(index);
typeControl.setImageResource(TrafficData.getTypeResource(type));
}
return v;
*/
//return convertView;
return super.getView(position, convertView, parent);
}
/*
* BaseAdapter @Override public int getCount() { // TODO Auto-generated
* method stub return 0; }
*
* @Override public Object getItem(int position) { // TODO Auto-generated
* method stub return null; }
*
* @Override public long getItemId(int position) { // TODO Auto-generated
* method stub return 0; }
*
* @Override public View getView(int position, View convertView, ViewGroup
* parent) { // TODO Auto-generated method stub return null; }
*/
}
CustomList Adapter = null;
Adapter = new CustomList( this,
R.layout.custom_list,
cursor,
new String[] {"txt","base_txt"},
new int[] { R.id.custom_list_txt,R.id.custom_list_base_txt}
);
SimpleCursorAdapter Adapter = null;
Adapter = new SimpleCursorAdapter( this,
R.layout.custom_list,
cursor,
new String[] {"txt","base_txt"},
new int[] { R.id.custom_list_txt,R.id.custom_list_base_txt}
);
SimpleCursorAdapter Adapter = null;
Adapter = new SimpleCursorAdapter( this,
android.R.layout.simple_list_item_1,
cursor, new String[] {"txt"},
new int[] { android.R.id.text1}
);
참고URL
http://groups.google.com/group/android-developers/browse_thread/thread/347c5df5a13fec58?pli=1
http://thinkandroid.wordpress.com/2010/01/09/simplecursoradapters-and-listviews/
SimpleCursorAdapters and ListViews