android中的嵌套列表,包含来自几个xml文件的listview

时间:2012-09-27 11:13:14

标签: android xml parsing listview nested

我正在创建一个在第一个屏幕上有多个Buttons的应用。每个Button将解析一个单独的XML文件,并且应该根据该信息创建一个嵌套列表。

所有XML个文件都具有以下结构:

<blalist>
<house>
     <name>Blaname1</name>
     <eaddress>195 bla steet</eaddress>
     <caddress>195 bla strasse</caddress>
     <telephone>123456</telephone>
</house>
<house>
     <name>Blaname2</name>
     <eaddress>15 bla steet</eaddress>
     <caddress>15 bla strasse</caddress>
     <telephone>12345685</telephone>
</house>
</blalist>

点击第一个按钮后,我想生成ListView,其中只包含标签“name”中的名称。所以列表应该只显示Blaname1,Blaname2 ...
点击其中一个名称后,所有其他标签应显示为内容;  标签“eaddress”,“caddress”,“电话”和三个额外的按钮。

基本上是一个3屏幕的场景。带主按钮的第一页。第二页显示仅使用名称生成的列表。第三个屏幕显示单击的特定名称的详细信息。

我该怎么做?我找到了解析xml到ListView的大量信息以及关于ExpandableListView的一些信息,但我无法真正地了解如何解决这个问题。请帮忙!

2 个答案:

答案 0 :(得分:0)

您需要做的就是解析XML并以SimpleExpandableListAdapter类支持的格式构建数据。

1)对于团体 List<HashMap<String, String>> lstGroups

2)对于组的子项 List<ArrayList<HashMap<String, String>>> lstGroupItems

然后您可以使用SimpleExpandableListAdapter

SimpleExpandableListAdapter expListAdapter = new SimpleExpandableListAdapter(
                getApplicationContext(), lstGroups,
                R.layout.group_row, // Group item layout XML.
                new String[] { "Group Item" }, // the key that will identify group in `lstGroups`.
                new int[] { R.id.row_name }, // ID of each group item.-Data
                lstGroupItems, // childData describes second-level
                R.layout.child_row, // Layout for sub-level entries(second level).
                new String[] { "Sub Item" }, // Keys that will identify child items in `lstGroupItems`
                new int[] { R.id.grp_child }
        );
setListAdapter(expListAdapter); 

您可以参考此示例

Expandable ListView in ANDROID using SimpleExpandableListAdapter, a simple example.

已添加:

我认为如果您拥有大量数据,您应该使用SQLiteDatabase,否则您可以采用以下格式构建数据

Map<String, Map<String, String>> mapHouses;

这里的钥匙将是房屋名称,其价值将再次是地图,它将保存房产和相应的价值。

您将需要访问不同活动的mapHouses,以便您可以在应用程序上下文中使用相同的内容,即Application类,并将房屋名称传递给需要显示房屋详细信息的活动。但是,如果您的应用程序被Android杀死,您最终会将大量数据保存到内存中,而这些数据可能会丢失。

答案 1 :(得分:0)

根据您对Vishal的回应,您的问题实际上是询问如何构建整个应用程序。

你需要建立

  • 带有启动列表活动的按钮的主要活动
  • 显示名称列表的列表活动
  • 可用于显示与名称相关联的详细信息的详细活动

此外,您还需要决定使用哪种技术对XML进行反序列化并以某种方式存储它。我建议使用XStream进行反序列化,但是有很多选项,你可能已经有了偏好。

然后,您将要存储已反序列化的Name对象。我建议您使用ORMLite或DB4O。

您需要一种方法来加载所有名称的列表,以及从您选择的任何持久性技术加载特定名称的详细信息的方法。

您最好的选择是尝试做这些事情然后发布有关您尝试构建应用程序的特定问题的新问题。

希望这有助于...而且不只是教奶奶吮吸鸡蛋