我已经摆弄 FirebaseRecyclerAdapter 有一段时间了。它确实是一个很棒的工具,可以使用其所有功能快速填充自定义列表/回收器 View 。然而,我想问的一件事是如何处理适配器本身内部项目的位置。
例如,我想模仿 WhatsApp 在聊天中的这个小功能。
因此,在群聊设置中,如果一个人连续发送多条连续消息,则该特定人员的显示名称将不可见。
根据我的理解,其背后的逻辑是:如果发送消息的人与 (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/