我在Android中实现了一个自定义CursorAdapter而没有使用from to
模式,为了能够广泛重用我的适配器,我想将它添加到我的适配器。我该怎么办?
这是我的适配器:
public class AtomAdapter extends CursorAdapter {
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public AtomAdapter(Context context, Cursor c) {
super(context, c);
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
//will create a new View only when recycling an older View is not possible
View v= inflater.inflate(R.layout.layout_row, parent,false);
TextView tv=(TextView)v.findViewById(R.id.txt_title);
v.setTag(R.id.txt_title,tv);
TextView tv2=(TextView)v.findViewById(R.id.txt_content);
v.setTag(R.id.txt_content,tv2);
return v;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// bind data to your row
TextView txt_title=(TextView)view.getTag(R.id.txt_title);
TextView txt_content=(TextView)view.getTag(R.id.txt_content);
txt_title.setText(cursor.getString(cursor.getColumnIndex(AtomDB.TITLE)));
txt_content.setText(cursor.getString(cursor.getColumnIndex(AtomDB.CONTENT)));
}
}
答案 0 :(得分:0)
我正在阅读SimpleCursorAdapter源代码,发现这两种方法可能有所帮助。第一种方法,findColumns从列名转换为列索引:
private void findColumns(String[] from) {
if (mCursor != null) {
int i;
int count = from.length;
if (mFrom == null || mFrom.length != count) {
mFrom = new int[count];
}
for (i = 0; i < count; i++) {
mFrom[i] = mCursor.getColumnIndexOrThrow(from[i]);
}
}
else {
mFrom = null;
}
}
第二种方法是bindView方法,您可以在其中调用更具体的方法,例如setViewText
和setViewImage
。
@Override
public void bindView(View view,Context context,Cursor cursor)
{
final int[] from=mFrom;
final int[] to=mTo;
for(int i=0;i<mTo.length;i++)
{
String text=cursor.getString(from[i]);
if(text==null)
text="No text found";
if(view instanceof TextView)
setViewText((TextView)v,text);
else if(view instanceof ImageView)
setViewImage((ImageView)v,text);
else
throw new IllegalStateException(v.getClass().getName()+" is not a View that can be bound by SimpleCursorAdapter");
}
}
方法setImageUri在主UI线程上运行,这可能会导致延迟。