是否可以向SimpleCursorAdapter添加其他列

时间:2011-02-20 06:00:47

标签: android simplecursoradapter

我已成功使用SimpleCursorAdapter列出displayname和value(在我的数据库中)并在列表活动中显示它们。

我现在要做的是为列表活动中的每个项目添加一个新视图(ImageView)。它应该最终看起来像这样。

Image_1_NotInDB -- DisplayName1FromDB -- DisplayName1FromDB
Image_2_NotInDB -- DisplayName2FromDB -- DisplayName2FromDB.

图像会有所不同(基于DisplayName1FromDB)。我认为SimpleCursorAdapter不再适用于此目的。

我尝试创建一个扩展SimpleCursorAdapter的customSimpleCursorAdapter,并尝试使用'newView'和'bindView'方法来实现。我几乎遵循这个:Custom CursorAdapters

问题是;我使用的是基于DB的值(我打算在构造函数或customSimpleCursorAdapter中传递)

public View newView(Context pContext, Cursor pCursor, ViewGroup pParent)
{
    Cursor lCursor = getCursor();
    final LayoutInflater inflater = LayoutInflater.from(pContext);
    View lView = inflater.inflate(layout, pParent, false);
    int lImage = "dog".equals(variable) ? R.drawable.dog : R.drawable.cat;
    // "variable" is a member variable (set at the constructor)
    ImageView lImageView = (ImageView) lView.findViewById(R.id.appImage);
    if (lImageView != null)
    {
        lImageView.setImageResource(lImage);
    }
    return pParent;
}

public void bindView(View pView, Context pContext, Cursor pCursor)
{
    int lImage = "dog".equals(variable) ? R.drawable.dog : R.drawable.cat;
    // "variable" is a member variable (set at the constructor)
    ImageView lImageView = (ImageView) lView.findViewById(R.id.appImage);
    if (lImageView != null)
    {
        lImageView.setImageResource(lImage);
    }
}

这是我尝试使用“customSimpleCursorAdapter”

的方法
    String[] lDisplay = new String[] {KEY_NAME, KEY_TIME};
    int[] lValues = new int[] {R.id.name, R.id.time};
    CustomRowCursorAdapter lCursorAdapter = new CustomRowCursorAdapter(this, R.layout.row, lSTime, lDisplay, lValues, "MY IDEA WAS TO PASS THE ANIMAL NAME HERE, BUT NOT LUCK as I am not sure How ");
    lCursorAdapter.newView(this, lSTime, getListView());
    lCursorAdapter.bindView(getListView(), this, lSTime);
    setListAdapter(lCursorAdapter);

ArrayAdapter是答案吗?如果是,您可以分享您传递给它的参数吗?

3 个答案:

答案 0 :(得分:1)

我建议使用自定义适配器

答案 1 :(得分:0)

  

ArrayAdapter是答案吗?

不,你不能在这里使用ArrayAdapter。因为您需要显示数据库中的数据,所以您必须在此处使用自定义CursorAdapter

答案 2 :(得分:0)

您可以从数据库向投影添加其他字段。

以下是我用于根据商品价格(以美分存储)和相关单位格式化成本的投影示例。

public static final String CONCATE_COST
    = "'$' || CASE WHEN SUBSTR(ROUND("+COLUMN_PRICE
        +"/100.0, 2), LENGTH(ROUND("+COLUMN_PRICE
        +"/100.0, 2))-1, 1)='.' THEN ROUND("+COLUMN_PRICE
        +"/100.0, 2) || '0' else ROUND("+COLUMN_PRICE
        +"/100.0, 2) end || "+COLUMN_UNIT;

将其用作列,您可以使用columnR.id.*的法线贴图将其与视图中的字段配对。