2011-11-06 3 views
0

SimpleCursorAdapter로 채워진 ListView가 있습니다. 이 뷰에 표시되어야하는 필드 중 하나 (TBTsqlHelperBudgets.KEY_INTERVAL)는 DB에 int (입력에 사용되는 스피너의 인덱스)로 저장됩니다. 하지만 ListView에서 색인 대신 텍스트를 표시하려고합니다. 어떤 제안?Android : CursorAdapter에서 회 전자 텍스트 사용

<resources> 
    <string-array name="intervals"> 
     <item>per day</item> 
     <item>per week</item> 
     <item>per month</item> 
     <item>per year</item> 
    </string-array> 
</resources> 

답변

1

그냥 텍스트를 표시하려면 (반대 :는 XML과

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.intervals, android.R.layout.simple_spinner_item); 

: 스피너가 XML 배열을 사용하여 설정됩니다 : 그런데

public class TBTTManageBudgetsActivity extends Activity { 
    // ... 
    // some stuff 
    // ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // ... 
     // some stuff 
     // ... 
       cursor = getBudgets(); 
       String[] uiBindFrom = { TBTsqlHelperBudgets.KEY_NAME, TBTsqlHelperBudgets.KEY_BUDGET, TBTsqlHelperBudgets.KEY_INTERVAL };    
       int[] uiBindTo = { R.id.name, R.id.budget, R.id.interval}; 
       cursor.moveToFirst(); 
       CursorAdapter adapter = new SimpleCursorAdapter(this.getApplicationContext(), R.layout.list_budgets_item, cursor, uiBindFrom, uiBindTo);     
       listView.setAdapter(adapter); 
     // ... 
     // some stuff 
     // ... 
    } 
    // ... 
    // some stuff 
    // ... 
} 

그것을 편집 할 수 있음), 이와 같이 전환 또는 조회를 즉시 수행 할 수 있습니다. 단순히 커서를 감싸기 만하면 특별한 처리가 필요한 열을 설정합니다. 다른 모든 것은 기본 Cursor 객체에 의해 처리됩니다.

package com.awc.util; 

import java.text.DateFormat; 
import java.util.Date; 

import android.content.ContentResolver; 
import android.database.CharArrayBuffer; 
import android.database.ContentObserver; 
import android.database.Cursor; 
import android.database.DataSetObserver; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 

public class ConversionAndLookupCursor implements Cursor { 
private static final String TAG = ConversionAndLookupCursor.class.getSimpleName(); 


private Cursor wrapped; 
private Converter converters[]; 


public ConversionAndLookupCursor(Cursor wrapped) { 
    if(wrapped == null) { 
     throw new NullPointerException("wrapped"); 
    } 

    this.wrapped = wrapped; 
    this.converters = new Converter[wrapped.getColumnCount()]; 
} 


@Override 
public void close() { 
    wrapped.close(); 
} 

@Override 
public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) { 
    Converter c; 
    String s; 


    Log.d(TAG, "Converting " + columnIndex); 
    c = converters[columnIndex]; 
    if(c != null) { 
     s = c.convertFrom(wrapped.getLong(columnIndex)); 
     buffer.data = s.toCharArray(); 
    } else { 
     wrapped.copyStringToBuffer(columnIndex, buffer); 
    } 
} 

@Override 
public void deactivate() { 
    wrapped.deactivate(); 
} 

@Override 
public byte[] getBlob(int columnIndex) { 
    return wrapped.getBlob(columnIndex); 
} 

@Override 
public int getColumnCount() { 
    return wrapped.getColumnCount(); 
} 

@Override 
public int getColumnIndex(String columnName) { 
    return wrapped.getColumnIndex(columnName); 
} 

@Override 
public int getColumnIndexOrThrow(String columnName) 
     throws IllegalArgumentException { 
    return wrapped.getColumnIndexOrThrow(columnName); 
} 

@Override 
public String getColumnName(int columnIndex) { 
    return wrapped.getColumnName(columnIndex); 
} 

@Override 
public String[] getColumnNames() { 
    return wrapped.getColumnNames(); 
} 

@Override 
public int getCount() { 
    return wrapped.getCount(); 
} 

@Override 
public double getDouble(int columnIndex) { 
    return wrapped.getDouble(columnIndex); 
} 

@Override 
public Bundle getExtras() { 
    return wrapped.getExtras(); 
} 

@Override 
public float getFloat(int columnIndex) { 
    return wrapped.getFloat(columnIndex); 
} 

@Override 
public int getInt(int columnIndex) { 
    return wrapped.getInt(columnIndex); 
} 

@Override 
public long getLong(int columnIndex) { 
    return wrapped.getLong(columnIndex); 
} 

@Override 
public int getPosition() { 
    return wrapped.getPosition(); 
} 

@Override 
public short getShort(int columnIndex) { 
    return wrapped.getShort(columnIndex); 
} 

@Override 
public String getString(int columnIndex) { 
    Converter c; 
    Long value = null; 
    String s; 


    c = converters[columnIndex]; 
    if(c != null) { 
     Log.d(TAG, "Converting in getString(" + columnIndex + ")"); 
     if(!wrapped.isNull(columnIndex)) { 
      value = wrapped.getLong(columnIndex); 
     } 
     s = c.convertFrom(value); 
    } else { 
     s = wrapped.getString(columnIndex); 
    } 

    return s; 
} 

@Override 
public boolean getWantsAllOnMoveCalls() { 
    return wrapped.getWantsAllOnMoveCalls(); 
} 

@Override 
public boolean isAfterLast() { 
    return wrapped.isAfterLast(); 
} 

@Override 
public boolean isBeforeFirst() { 
    return wrapped.isBeforeFirst(); 
} 

@Override 
public boolean isClosed() { 
    return wrapped.isClosed(); 
} 

@Override 
public boolean isFirst() { 
    return wrapped.isFirst(); 
} 

@Override 
public boolean isLast() { 
    return wrapped.isLast(); 
} 

@Override 
public boolean isNull(int columnIndex) { 
    return wrapped.isNull(columnIndex); 
} 

@Override 
public boolean move(int offset) { 
    return wrapped.move(offset); 
} 

@Override 
public boolean moveToFirst() { 
    return wrapped.moveToFirst(); 
} 

@Override 
public boolean moveToLast() { 
    return wrapped.moveToLast(); 
} 

@Override 
public boolean moveToNext() { 
    return wrapped.moveToNext(); 
} 

@Override 
public boolean moveToPosition(int position) { 
    return wrapped.moveToPosition(position); 
} 

@Override 
public boolean moveToPrevious() { 
    return wrapped.moveToPrevious(); 
} 

@Override 
public void registerContentObserver(ContentObserver observer) { 
    wrapped.registerContentObserver(observer); 
} 

@Override 
public void registerDataSetObserver(DataSetObserver observer) { 
    wrapped.registerDataSetObserver(observer); 
} 

@Override 
public boolean requery() { 
    return wrapped.requery(); 
} 

@Override 
public Bundle respond(Bundle extras) { 
    return wrapped.respond(extras); 
} 

@Override 
public void setNotificationUri(ContentResolver cr, Uri uri) { 
    wrapped.setNotificationUri(cr, uri); 
} 

@Override 
public void unregisterContentObserver(ContentObserver observer) { 
    wrapped.unregisterContentObserver(observer); 
} 

@Override 
public void unregisterDataSetObserver(DataSetObserver observer) { 
    wrapped.unregisterDataSetObserver(observer); 
} 


//////////////////////////////////// 
// DATA CONVERSION STUFF 
//////////////////////////////////// 
public void setDateConversion(int column) { 
    converters[column] = new DateConverter(); 
} 

public void setLookupConversion(int column, Cursor lookup, int lookupColumn) { 
    converters[column] = new LookupConverter(lookup, lookupColumn); 
} 

public void clearConversion(int column) { 
    converters[column] = null; 
} 

private interface Converter { 
    public String convertFrom(Object value); 
} 

private class DateConverter implements Converter { 
    private DateFormat fmt; 


    public DateConverter() { 
     fmt = DateFormat.getDateInstance(DateFormat.SHORT); 
    } 

    public String convertFrom(Object value) { 
     String s = null; 


     if(value != null && value instanceof Long) { 
      s = fmt.format(new Date((Long)value)); 
     } 

     return s; 
    } 
} 

private class LookupConverter implements Converter { 
    private Cursor lookup; 
    private int lookupColumn; 

    public LookupConverter(Cursor lookup, int column) { 
     if(lookup == null) throw new NullPointerException("lookup"); 

     this.lookup = lookup; 
     this.lookupColumn = column; 
    } 

    public String convertFrom(Object id) { 
     String s = null; 


     if(id != null && id instanceof Long) { 
      lookup.moveToPosition(((Long)id).intValue()); 
      s = lookup.getString(lookupColumn); 
     } 

     return s; 
    } 
} 
} 
관련 문제