12

我有一个包含数据库中所有行的光标。我将光标传递给 CursorAdapter,并在列表中显示数据。但我需要在一开始就展示一个额外的元素。我怎样才能做到这一点?

我在某处读到,也许它可以用 CursorWrapper 完成,它可以在结果中注入额外的值。但我不太确定该怎么做。

如果有人可以给我看一个例子(代码),或者有另一个想法如何解决这个问题,请告诉我。谢谢!

4

8 回答 8

10

正如我在这个问题中所建议的那样,如何使用MergeCursor和的组合:如何将额外的元素插入到 SimpleCursorAdapter 或 Cursor for a Spinner?MatrixCursor

于 2013-01-31T10:01:09.520 回答
4

像这样覆盖 getCount:

@Override
public int getCount() {
    final int count = super.getCount();
    return count+1;
}

并且曾经使用过适配器的人会获得额外的一行。只要记住在 getView 中处理这个,即。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(position == 0) {
            final View v = inflater.inflate(R.layout.special_suggestion, parent,false);
            final TextView tv = (TextView) v.findViewById(android.R.id.text1);
            tv.setText("Search for '" + this.keyword + "'");
            return v;
        }
        else {
            try {
                return super.getView(position, convertView, parent);
            }
            catch (IllegalStateException e) {
                Log.e(TAG, "IllegalStateException: " + e);
            }
        }
        return inflater.inflate(this.layout, parent,false);
    }
于 2014-03-05T14:26:58.140 回答
2

您可以使用列表视图的addHeaderView()addFooterView()

TextView label = new TextView(context);
label.setText("Something Here");

listView.addHeaderView(label);

请务必在致电之前这样做setAdapter()

于 2014-02-26T05:23:13.570 回答
1

Cursor您可以从into读取数据List<YourRow>,其中YourRow是光标行中数据的类。然后只需将新YourRow项目添加到列表并BaseAdapter用于您的ListView. 阅读本文以了解如何处理BaseAdapter

于 2012-09-19T10:30:15.713 回答
1

我最终通过在数据库中添加一个额外的元素来解决这个问题。这是最简单的解决方案,因为我一开始就需要额外的元素。因此,在创建我的数据库之后,我在表中插入了一行我需要额外元素的行,其中包含我想要的值。

我还发现了这个讨论 [ https://groups.google.com/forum/?fromgroups=#!topic/android-developers/QSOGjgL8kXI ] 所以如果有人有类似的问题,这将是一个起点。谢谢!

于 2012-09-19T12:57:26.470 回答
0

在适配器中,您可能可以在getView方法中显示额外的数据。但这有点取决于数据来自哪里,你想用它做什么(只是显示它?)等等。

于 2012-09-19T10:28:30.123 回答
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;

将其用作传递给列表视图的列,您可以直接将其与视图中的字段配对。

于 2013-02-26T08:00:32.947 回答
0

在这些情况下,我的解决方案是使用静态值执行 UNION 查询。前任:

(选择 -1 作为 id,“HERE GOES THE NAME”作为名称,“HERE GOES THE ADDRESS”作为地址) UNION(从联系人中按姓名顺序选择 ID、姓名、地址)

(请仔细检查语法,我是凭记忆做的)

这样,您将获得带有 -1|HERE GOES THE NAME|HERE GOES THE ADDRESS 以及其余行的第一行

因此,您不会“污染”数据库,并且很容易根据条件打开/关闭第一行并使用连接。

于 2013-12-05T00:05:07.373 回答