【问题标题】:How to create section header listing like whatsapp?如何创建像whatsapp这样的部分标题列表?
【发布时间】:2019-07-16 14:59:11
【问题描述】:

我正在开发聊天应用程序,并且我已经设计了虚拟聊天历史记录。但是我不知道如何根据日期对消息进行分组,当我们向下滚动时,日期指示器就像什么一样粘在顶部位置应用程序。你能给我指路吗,我怎样才能做到这一点?我在下面附上了一些截图来详细说明我的问题。

【问题讨论】:

    标签: android whatsapp


    【解决方案1】:

    将您的标题放在您的自定义 lisview 适配器布局中,并检查您的当前消息日期和以前的消息日期。如果日期相同,则隐藏您的标题,否则显示您的标题。见下文:

     holder.tvDate.setText(chatMessage.getDate());
        if (position > 0) {
            if (chatMessages.get(position).getDate().equalsIgnoreCase(chatMessages.get(position - 1).getDate())) {
                holder.header.setVisibility(View.GONE);
            } else {
                holder.header.setVisibility(View.VISIBLE);
            }
        } else {
            holder.header.setVisibility(View.VISIBLE);
        }
    

    【讨论】:

    • 你是用recyclerview来展示上面的列表吗?我使用了recyclerview,但它没有显示日期时间
    • 我当时用过listview。但你也可以在 recyclerview 中实现这一点。
    • 我使用了recyclerview,但它无法显示日期时间视图。你喜欢这个吗? stackoverflow.com/questions/67058427/…
    【解决方案2】:

    简单。只需将标题视图添加到您的 ListView

    TextView textView = new TextView(context);
    textView.setText("Hello. I'm a header view");
    
    listView.addHeaderView(textView);
    

    更多详情-https://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

    更新:

    到目前为止,最简单的方法是在每个项目中嵌入日期标题视图。然后,您需要在 bindView 中做的就是将上一行的日期与这一行的日期进行比较,如果相同则隐藏日期。像这样的:

    String thisDate = cursor.getString(dateIndex);
    String prevDate = null;
    
    // get previous item's date, for comparison
    if (cursor.getPosition() > 0 && cursor.moveToPrevious()) {
        prevDate = cursor.getString(dateIndex);
        cursor.moveToNext();
    }
    
    // enable section heading if it's the first one, or 
    // different from the previous one
    if (prevDate == null || !prevDate.equals(thisDate)) {
        dateSectionHeaderView.setVisibility(View.VISIBLE);
    } else {
        dateSectionHeaderView.setVisibility(View.GONE);
    }
    

    【讨论】:

    • 正如你在上面的截图中看到的,昨天有多个标题,今天和列表视图只包含一个标题@saurav
    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2015-01-21
    • 2022-12-04
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多