3

我已成功使用 SimpleCursorAdapter 列出显示名称和值(都在我的数据库中)并将它们显示在我的列表活动中。

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

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

图像将不同(基于 DisplayName1FromDB)。我认为 SimpleCursorAdapter 不再适合这个目的。

我尝试创建一个 customSimpleCursorAdapter 扩展 SimpleCursorAdapter 并尝试使用 'newView' 和 'bindView' 方法来实现。我几乎遵循了这个:自定义 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 是答案吗?如果是,您能否分享您将传递给它的参数?

4

3 回答 3

1

我建议去定制适配器

于 2011-02-20T06:16:00.737 回答
0

ArrayAdapter 是答案吗?

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

于 2011-02-20T07:27:08.553 回答
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;

将其用作列,您可以使用 to 的法线映射将其与视图中的字段column配对R.id.*

于 2013-03-15T00:36:55.627 回答