嗨,我必须像这张图片一样制作一个列表视图。
这些字母A,B由listview自动滚动。 字母A出现,直到列表视图中没有项目以A开头。
我对右侧的列表视图没有任何问题。我很难在列表视图中显示字母abc。
任何人都可以帮我这个吗? 感谢。
答案 0 :(得分:2)
我假设您已经知道如何制作列表视图以显示数据和/或图像,如上图所示,并且您的主要困难是显示“A”,“B”,“C”等等。
如果是这种情况,那么一个好的方法是指定一个模型列表(数据),每个模型包含一个“name”,“imageUrl”和&的字段。可选的“firstLetter”,可以为null。
当您通过“名称”字段对这些模型进行排序时,您将遍历列表一次,并在每次迭代时检查“名称”字段的第一个字母是否与前一个字母不同(对于第一个字母始终为真)元件)。如果是这种情况,则将“firstLetter”字段设置为“name”字段的大写第一个字母。否则,它将为null。
然后在你的适配器中,如果“firstLetter”字段不为null,则使显示此字母的TextView可见(否则,使其成为GONE
),并将文本分配给“firstLetter”的值
修改强>
上述内容是在您要求“A”,“B”等为“粘性”之前编写的,直到没有更多项目以该字母开头为止。
要实现“粘性”行为,类似于使文本日期变得粘稠的WhatsApp应用程序,您可以创建一个浮动在列表上的附加视图(您需要确保填充,样式和字体匹配,以便一切看起来都不错。
然后,在适配器中,您需要检查以下内容:
答案 1 :(得分:1)
我认为你必须在relativeLayout上使用2个列表视图。首先是名字的首都,然后是你想要显示的名单。 要创建listview,您必须创建itemList.xml,其中包含您想要创建listview.xml的名称和照片。您将需要一个带有属性的“people.java”类,例如名称和照片。此外,您需要一个适配器来创建list.xml和mainclass.java之间的关系。 这个页面是西班牙语,但代码可以用于你: http://www.oneoctopus.es/desarrollo-android/listviews-personalizadas-en-android/
答案 2 :(得分:0)
当您在适配器类中获取数据时,检查每个对象及其第一个单词是否在char中提取它们的第一个单词并将该第一个单词与其他对象进行比较(如果它们相同则忽略,如果不同则将前一个char保存到temp char并将新的一个赋值给前一个char,依此类推。
答案 3 :(得分:-1)
对于粘性字母索引,您可以执行以下操作:
我已经回答了这个问题中的粘性索引,并提供了一个执行此操作的库。希望有人仍然需要它:https://stackoverflow.com/a/30679418/2068693