【发布时间】:2021-05-28 12:20:30
【问题描述】:
您好,我尝试在打开聊天框时自动向下滚动到最新消息,就像任何 WhatsApp 或任何聊天应用程序一样。 smoothscrolltoposition、smoothscroller 等等。chat design image
请给我一个解决方案,让我可以像 WhatsApp 一样使用这个聊天应用程序,当我参加这个活动时,我想在屏幕上看到最新消息。当打开键盘输入消息时,最后一条消息应该在键盘上方。 chat application image
我使用的代码是
MessageEnvironmentAdapter messageEnvironmentAdapter = new MessageEnvironmentAdapter(MessageEnvironmentActivity.this, messageModelArrayList);
messagerecycler = findViewById(R.id.messagerecycler);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setStackFromEnd(true);
messagerecycler.setLayoutManager(linearLayoutManager);
messagerecycler.setAdapter(messageEnvironmentAdapter);
从 firebase 实时数据库中获取数据
chatreference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
messageModelArrayList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
MessageModel messageModel = dataSnapshot.getValue(MessageModel.class);
messageModelArrayList.add(messageModel);
}
messageEnvironmentAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
发送消息数据并存储在实时数据库中
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
simage = snapshot.child("imageuri").getValue().toString();
rimage = reciverimage;
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
sendmessagebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String messagetext = editmessage.getText().toString().trim();
if (messagetext.isEmpty()) {
Toast.makeText(MessageEnvironmentActivity.this, "please enter valid message", Toast.LENGTH_SHORT).show();
return;
}
editmessage.setText("");
Date date = new Date();
MessageModel messageModel = new MessageModel(messagetext, senderuid, date.getTime());
database.getReference().child("chats")
.child(senderroom)
.child("messages")
.push()
.setValue(messageModel).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
database.getReference().child("chats")
.child(reciverroom)
.child("messages")
.push().setValue(messageModel).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
}
});
}
});
}
});
【问题讨论】:
标签: java android firebase-realtime-database android-recyclerview android-linearlayout