我需要将两个列表视图合并在一起,并在第一部分和第二部分的结果之间添加两个空白字段。
因为我使用的是游标,所以我使用了“select ... union select ...”并加入了结果,但是我在中间插入空行时遇到了麻烦,因为我给了它们负 id 以便以后识别它们并且它们位于列表的顶部或底部,但我需要它们以某种方式位于两个数据集之间的中间。
另外我需要知道哪些是空字段,以便我可以禁用它们,我也尝试过 MergeCursor 但它重复了我的结果。
我需要将两个列表视图合并在一起,并在第一部分和第二部分的结果之间添加两个空白字段。
因为我使用的是游标,所以我使用了“select ... union select ...”并加入了结果,但是我在中间插入空行时遇到了麻烦,因为我给了它们负 id 以便以后识别它们并且它们位于列表的顶部或底部,但我需要它们以某种方式位于两个数据集之间的中间。
另外我需要知道哪些是空字段,以便我可以禁用它们,我也尝试过 MergeCursor 但它重复了我的结果。
如果你使用 CommonWare 的MergeAdapter,它应该很容易达到你想要的结果。
它需要多个列表(您也可以添加单独的视图,因此可以插入空行)并将它们放在一起以在列表中使用。
这是我最近给出的答案的链接,对如何使用 MergeAdapter 进行了更深入的解释。
编辑
听起来您使用 UNION 和 JOIN 的查询在游标中为您提供了重复的结果。尝试将它们分成两个单独的游标。然后创建两个列表适配器和两个空视图,并将它们全部添加到合并适配器中并将其设置为列表视图。
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);
我认为您可以使用一个简单的技巧。通常使用具有正 ID 的空行添加您的行。维护空行的 id,您可以禁用它们。
ArrayList <int> empty_row_id = new ArrayList<int>();
if (rows is empty) {
empty_row_id.Add(row_id);
}
每当您填写该行时,只需搜索 id 并从 empty_row 中删除
希望对你有帮助。。