带有来自TreeMap的子视图和父视图的Listview <string,arraylist <string>&gt;

时间:2015-12-21 12:12:38

标签: android listview android-listview

我想我的情况应该很常见,应该有一个简单的解决方案(我不知道)。实际上,我想在TreeMap<String, ArrayList<String>>中使用Adapter来显示ListView中的国家/地区。我没有使用ListView创建了这个列表(如下图所示),但效率很低。

我的问题:

ListView是否适合这项任务?
是的:我应该如何定义适配器?
不:我还能使用哪种效率与ListView一样高效?

顺便说一下,我的TreeMap就像这样:(&#34; C&#34;,{&#34; Country1&#34;,&#34; Country2&#34;,...})

enter image description here

正如您在上图中所看到的,我想使用不同的分频器(逻辑很明显)。

2 个答案:

答案 0 :(得分:2)

据我所知,您希望ListView使用标题:'A', 'B', 'C'等。在这种情况下,您可以依赖this answer

如果您不需要标题,那么您可以使用TreeMap的值()提供ListView,也许您在将其传递给ListView之前需要进行一些排序。但是,如果您按字母排序集合,我不明白为什么您不想要标题:)

因此,对于标题视图,您需要以特定方式定义ListView的适配器。

我还必须提一下,View整体性能优于ListView Adapter,称为RecyclerView,我建议对其进行检查!它还可以选择为列表项添加标题。

编辑:我无法看到附加图片,因此有更多可能性:

我建议使用普通的ListView / RecyclerView和特殊的public class ListItem{ String name; String category; boolean isHeader; [...] } ,而不是普通的字符串。创建一个包含String和boolean的类,并将地图转换为这些对象的列表。 像这样:

Adapter

如果对象是第一项,则将布尔值设置为true。在列表适配器中,您可以检查项目的布尔值,并根据getView()的{​​{1}}方法创建实际项目的视图。

答案 1 :(得分:1)

我认为ListView适合执行此操作,但RecyclerView会做得更好,只取决于我们如何为其定制适配器。
而且我认为TreeMap会慢一些并浪费很多内存,也就是说,它可以使它变得浪费。简而言之,你可以使用HashMap代替,更简单,你可以使用SparseMap<List<String>>代替,键是0-25,值是城市列表,这将使用更少的内存。