12

データベースのすべての行を含む Cursor があります。その Cursor を CursorAdapter に渡し、データをリストに表示します。しかし、最初にもう 1 つの要素を表示する必要があります。どうやってやるの?

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;
}

アダプターを使用したことがある人は、追加の行を 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 に答える
1

Cursorからにデータを読み取ることができます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

データベースにフィールドを追加するのと同様に、データベースからプロジェクションにフィールドを追加できます。これにより、データベースのスペースが少し節約され、情報の冗長性が減少します。これは、フィールドが格納されるだけでなく、アクセスごとに再計算されることを意味します。

これは、アイテムの価格 (セントで保存) と関連する単位に基づいてコストをフォーマットするために使用した予測の例です。

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 クエリを実行することです。元:

(IDとして-1、名前として「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 に答える
0

アダプターでは、おそらくgetViewメソッドに余分なデータを表示できます。しかし、それはデータがどこから来たのか、それで何をしたいのか(単に表示するだけですか?)などに依存します.

于 2012-09-19T10:28:30.123 に答える