如何获取字段值而不是列名?

时间:2011-07-20 23:41:22

标签: android cursor android-viewbinder

我想以这种方式用光标填充数据列表:

            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

2 个答案:

答案 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

获取字符串