如何制作类似Android的联系人listView?

时间:2014-11-16 13:13:50

标签: android android-layout

enter image description here

嗨,我必须像这张图片一样制作一个列表视图。

这些字母A,B由listview自动滚动。 字母A出现,直到列表视图中没有项目以A开头。

我对右侧的列表视图没有任何问题。我很难在列表视图中显示字母abc。

任何人都可以帮我这个吗? 感谢。

4 个答案:

答案 0 :(得分:2)

我假设您已经知道如何制作列表视图以显示数据和/或图像,如上图所示,并且您的主要困难是显示“A”,“B”,“C”等等。

如果是这种情况,那么一个好的方法是指定一个模型列表(数据),每个模型包含一个“name”,“imageUrl”和&的字段。可选的“firstLetter”,可以为null。

当您通过“名称”字段对这些模型进行排序时,您将遍历列表一次,并在每次迭代时检查“名称”字段的第一个字母是否与前一个字母不同(对于第一个字母始终为真)元件)。如果是这种情况,则将“firstLetter”字段设置为“name”字段的大写第一个字母。否则,它将为null。

然后在你的适配器中,如果“firstLetter”字段不为null,则使显示此字母的TextView可见(否则,使其成为GONE),并将文本分配给“firstLetter”的值

修改

上述内容是在您要求“A”,“B”等为“粘性”之前编写的,直到没有更多项目以该字母开头为止。

要实现“粘性”行为,类似于使文本日期变得粘稠的WhatsApp应用程序,您可以创建一个浮动在列表上的附加视图(您需要确保填充,样式和字体匹配,以便一切看起来都不错。

然后,在适配器中,您需要检查以下内容:

  1. 我是否已经为我的手机要展示的信件显示这封“悬停”字母?如果是这种情况,请不要显示它。当“A”部分位于屏幕之外时,这将阻止显示两个“A”。
  2. 显示“A”或“B”的单元格位置是否稍微偏离屏幕?如果是这样,请务必显示“悬停”字母并给它正确的文字。

答案 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)

对于粘性字母索引,您可以执行以下操作:

  1. 在RecyclerView的最左侧,创建一个包含字母索引的TextView;
  2. 在Recycler视图的顶部(在包装它的布局中)放置一个TextView以覆盖您在步骤1中创建的那个,这将是粘性的;
  3. 在RecyclerView中添加OnScrollListener。在onScrolled()方法上,设置在步骤2中为从firstVisibleRow获取的引用文本创建的TextView。在此之前,你应该有一个不受过渡影响的苛刻指数;
  4. 要添加淡入/淡出过渡效果,请开发一个逻辑,检查currentFirstVisibleItem的前一项是否是前一个字母列表的最后一个,或者secondVisibleItem是否是新字母的第一个。基于这些信息,使粘性索引可见/不可见,行索引相反,在此最后添加alpha效果。
  5. 我已经回答了这个问题中的粘性索引,并提供了一个执行此操作的库。希望有人仍然需要它:https://stackoverflow.com/a/30679418/2068693