0

2つのリストビューを1つに結合し、最初の部分と2番目の部分の結果の間に2つの空白のフィールドを追加する必要があります。

カーソルを使用しているため、 「select ... union select ...」を使用して結果を結合しましたが、後で識別するために負のIDを指定しているため、中央に空の行を挿入するのに問題があります。それらはリストの一番上または一番下に表示されますが、2つのデータセットの中間にある必要があります。

また、空のフィールドを無効にできるように、どちらが空のフィールドであるかを知る必要があります。MergeCursorも試しましたが、結果が重複しています。

4

2 に答える 2

1

CommonWare のMergeAdapterを使用すると、目的の結果を簡単に実現できます。

複数のリストを取得し (個々のビューも追加できるため、空の行を挿入できます)、それらをすべてまとめてリストで使用できます。

これは、MergeAdapter の使用方法をより詳細に説明した最近の回答へのリンクです。

編集

UNION と JOIN を使用したクエリで、カーソルに重複した結果が表示されているようです。それらを 2 つの別個のカーソルに分割してみてください。次に、2 つのリスト アダプターと 2 つの空のビューを作成し、それをすべて mergeadapter に追加して、リストビューに設定します。

lv = (ListView) v.findViewById(android.R.id.mergelist);

Cursor c1 = db.fetchCursor1();
String[] from1 = new String[] { DB.ITEM_1 };
int[] to1 = new int[] { R.id.ListItem1 };
SimpleCursorAdapter ca1 = new SimpleCursorAdapter(getActivity(),
    R.layout.your_layout, c1, from1, to1);

Cursor c2 = db.fetchCursor2();
String[] from2 = new String[] { DB.ITEM_1 };
int[] to2 = new int[] { R.id.ListItem1 };
SimpleCursorAdapter ca2 = new SimpleCursorAdapter(getActivity(),
    R.layout.your_layout, c2, from2, to2);

View Blank1 = getLayoutInflater.inflate(R.layout.blank);
View Blank2 = getLayoutInflater.inflate(R.layout.blank);

myMergeAdapter = new MergeAdapter();
myMergeAdapter.addAdapter(ca1);
myMergeAdapter.addView(Blank1);
myMergeAdapter.addView(Blank2);
myMergeAdapter.addAdapter(ca2);

lv.setAdapter(myMergeAdapter);
于 2012-05-14T13:01:39.350 に答える
0

簡単な裏技が使えると思います。通常、正の ID を持つ空の行で行を追加します。空の行の ID を維持すると、それらを無効にすることができます。

ArrayList <int> empty_row_id = new ArrayList<int>();


if (rows is empty) {
     empty_row_id.Add(row_id);
}

その行を埋めるたびに、idを検索してempty_rowから削除します

それがあなたを助けることを願っています..

于 2012-05-14T12:34:01.073 に答える