我想我的情况应该很常见,应该有一个简单的解决方案(我不知道)。实际上,我想在TreeMap<String, ArrayList<String>>
中使用Adapter
来显示ListView
中的国家/地区。我没有使用ListView
创建了这个列表(如下图所示),但效率很低。
我的问题:
ListView
是否适合这项任务?
是的:我应该如何定义适配器?
不:我还能使用哪种效率与ListView
一样高效?
正如您在上图中所看到的,我想使用不同的分频器(逻辑很明显)。
答案 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
,值是城市列表,这将使用更少的内存。