[언어] 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