firebaserecycleradapter

firebaserecycleradapter

我已经摆弄FirebaseRecyclerAdapter好一阵子了。它确实是一个很好的工具,可以用它的所有特性快速填充自定义列表/回收器视图。但是,我想问的一件事是如何处理适配器内部的项目位置。
例如,我想模仿whatsapp在聊天中的这个小功能。(为审查道歉,信息相当敏感)。
java - 在FirebaseRecyclerAdapter中处理位置-LMLPHP
因此,在群聊设置中,如果一个人在一行中连续发送多条消息,则该特定人的显示名称将不可见。
根据我的理解,它背后的逻辑是:如果发送消息的人对于(position-1)是相同的,那么我只会使edittext对于(position)不可见。当然,这是为了防止非常长的文本流和最少的重复信息量。
假设firebase数据库中的json树如下所示。

{
  "messages" : {
    "pushed_id_1" : {
      "message_sender" : "AppleJuice",
      "message_text" : "Are you free?"
    },
    "pushed_id_2" : {
      "message_sender" : "AppleJuice",
      "message_text" : "On Saturday I mean..."
    }
  }
}

FirebaseRecyclerAdapter会是这样的。
FirebaseRecyclerAdapter<Message, MessageViewHolder> adapter = new FirebaseRecyclerAdapter<Message, MessageViewHolder>(Message.class, R.layout.message_item, MessageViewHolder.class, myRef) {

            @Override
            protected void populateViewHolder(MyBookingsViewHolder viewHolder, Booking model, int position) {
                viewHolder.messageSender.setText(model.getMessage_sender());
                viewHolder.messageText.setText(model.getMessage_text());

                //put some code here to implement the feature that we need
            }
        };
        messages_recycler_menu.setAdapter(adapter);

我所做的最远的工作是在firebasecycleradapter中使用getitemcount()方法,但是我仍然无法实现与我之前所说的whatsapp相似的特性。
有什么方法可以做到这一点吗?或者我在这个例子中遗漏了一些非常重要的东西?
提前谢谢你,如果你需要更多的信息请告诉我。

最佳答案

如评论所述:
假设我接收到消息,并将发送方的名称存储在常量字符串中,该字符串在某个类(即appconstants)中应为静态常量,以便此后可以在任何地方访问它:
在PopulateViewHolder或消息接收器中执行以下操作:

if (TextUtils.isEqual(storedSender,model.getMessage_sender())){
        viewHolder.messageSender.setVisiblity(View.GONE)
       }
    else{
        // do your normal flow
        viewHolder.messageSender.setVisiblity(View.VISIBLE);
    storedSender = model.getMessage_sender();
    }

这样会自动更新最后一封邮件的发件人姓名,这正是您试图通过适配器实现的位置!
快乐代码:)

10-05 18:53