【问题标题】:How to sort contacts data alphabetically according name & when contact doesn't have a name, use email instead?如何根据姓名按字母顺序对联系人数据进行排序,当联系人没有姓名时,请改用电子邮件?
【发布时间】:2019-07-12 04:35:38
【问题描述】:

我目前正在使用 Kotlin 和 MVVM 架构创建一个简单的联系人应用程序,我能够使用 recyclerview 显示联系人的姓名和电子邮件地址,但是当“联系人”没有姓名时,我只想显示电子邮件地址也在回收站视图中按字母顺序排序,数据是“名称”或“电子邮件地址”。

我的目标(姓名、电子邮件)
- 约翰,john@gmail.com
- kaila@gmail.com
- 李,lee@gmail.com

我尝试用

更改我的 List 变量
for (contact in listContacts) {
    if (contact.name == "" || contact.name.isEmpty()) {
        contact.name = contact.email
    }
}

但它会使contact.name 与contact.email 具有相同的值,我不想要它。 contact.name 需要保留其原始值,即 "" 或 null 以获取更多功能。

我想不出通过更改我的 DAO 中的查询来解决此问题的方法。

【问题讨论】:

    标签: android kotlin mvvm


    【解决方案1】:

    为此,我认为您在 pojo 和模型类中采用了两个变量。

    现在,为了显示名称,我认为您在原始文件中采用了一个简单的 TextView,或者为 RecyclerView 的原始(适配器)采用了一个 xml 文件。

    好的。

    现在,您正在从 contact.name 设置名称值,这是正确的。

    但是,如果其中没有值,您将 contact.email 的值分配给 contact.name。这就是改变 name 值的原因。

    为避免这种情况,为什么不能将 contact.email 的值直接设置为 TextView,如下所示:

        for (contact in listContacts) {
            if (contact.name == "" || contact.name.isEmpty()) {
                tv_user_name.setText(""+contact.email);
            }else{
                tv_user_name.setText(""+contact.name);
            }
        }
    

    这里,tv_user_name 是原始文件中的 TextView。

    简单..!

    【讨论】:

      【解决方案2】:

      字母排序使用List.sortBy()

      list.sortBy { if (!it.name.isNullOrEmpty()) it.name else it.email }
      

      name 不存在时,它会检查email

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多