我想以这种方式用光标填充数据列表:
myCursor = myDBA.getAllCompanies();
startManagingCursor(myCursor);
myListAdapter = new SimpleCursorAdapter(this, R.layout.company_row, myCursor, FROM, TO);
myListAdapter.setViewBinder(VIEW_BINDER);
companiesListView.setAdapter(myListAdapter);
我使用自定义ViewBinder
在每行中填充两个TextViews
和一个ImageView
:
private final ViewBinder VIEW_BINDER = new ViewBinder() {
/**
* Binds the Cursor column defined by the specified index to the
* specified view.
*/
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
switch (viewId) {
case R.id.company_name:
case R.id.company_desc:
Log.d(TAG, "Binding TextView");
TextView venueText = (TextView) view;
venueText.setText(cursor.getString(columnIndex));
return true;
case R.id.company_icon:
Log.d(TAG, "Binding ImageView");
ImageView venueIcon = (ImageView) view;
String iconName;
iconName = cursor.getString(columnIndex); //Here I get the column name not the field value
Resources resources = myContext.getResources();
Drawable drawable = resources.getDrawable(resources
.getIdentifier("my.package:drawable/"
+ iconName, null, null));
venueIcon.setImageDrawable(drawable);
return true;
}
return false;
}
};
我的问题是cursor.getString()
方法调用返回列名而不是字段的值,所以我得到数百行的列名。
更新
我的getAllCompanie
包含moveToFirst
的{{1}}来电,但我仍然获得了列名:
Cursor
答案 0 :(得分:2)
您是否尝试将光标移至第一个索引cursor.moveToFirst();
,然后执行cursor.getString(columnIndex);
?
还有另一种方法,创建一个List或数组来保存游标中的值,通过遍历游标访问其中的所有数据
while(cursor.isAfterLast()==false)
{
list.add(cursor.getString(thestringcollumnindex);
cursor.moveToNext();
}
然后就这样做
iconName=list.get(columnindex);
这个解决方案并不是最好的,但是如何达到目的。
答案 1 :(得分:0)
你试过吗?
cursor.getString(cursor.getColumnIndex("column_name"));
它将从column_name
获取字符串