使用分隔线将两个光标列表视图合二为一



我需要将两个列表视图合二为一,并添加两个空白字段来补充第一部分和第二部分的结果。

由于我使用的是光标,因此我使用了"选择...联合选择..."并加入了结果,但是我在中间插入空行时遇到了问题,因为我给了它们负 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中删除

希望对您有所帮助。

最新更新