java - 处理 FirebaseRecyclerAdapter 中的位置

标签 java android firebase firebase-realtime-database

我已经摆弄 FirebaseRecyclerAdapter 有一段时间了。它确实是一个很棒的工具,可以使用其所有功能快速填充自定义列表/回收器 View 。然而,我想问的一件事是如何处理适配器本身内部项目的位置。

例如,我想模仿 WhatsApp 在聊天中的这个小功能。

enter image description here

因此,在群聊设置中,如果一个人连续发送多条连续消息,则该特定人员的显示名称将不可见。

根据我的理解,其背后的逻辑是:如果发送消息的人与 (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);

我最远的做法是在 FirebaseRecyclerAdapter 中使用 getItemCount() 方法,但我仍然无法实现我之前讨论过的模仿 Whatsapp 的功能。

有没有一种方法可以实现这一点?或者我在这个例子中遗漏了一些非常重要的东西?

最佳答案

String lastSender=null; //or some random string

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) {
if (model.getMessage_sender().equals(lastSender){   //check if the current sender is same as the last sender
    viewHolder.messageText.setText(model.getMessage_text());    //setting only message text
    viewHolder.messageSender.setVisibility(View.GONE);  //if required
}else{
    lastSender=model.getMessage_sender();//updating the lastSender value
    viewHolder.messageSender.setVisibility(View.VISIBLE);   //if required
    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);

关于java - 处理 FirebaseRecyclerAdapter 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47348198/

相关文章:

java - 如何在 Play Framework 项目中使用相对路径访问资源文件?

android - 更新到Android 3.1.3时找不到符号R

android - GCM - 很少收到主题消息

java - 是否真的有必要删除完整的监听器 Firebase 身份验证?

javascript - 为什么Firebase数据库的javascript循环函数会不断 self 复制

android - Firebase 电话身份验证未显示应用名称

java - Android Intent - 传递数据

java - 自定义对象的 BlazeDS 和 ArrayList

java - ArcGIS GeoEvent 处理器 - javax.xml.ws.soap.SOAPFaultException : Unmarshalling Error

java - 将 Sprite 表动态切割成具有可变帧大小的单独位图