przy tworzeniu czatu Android za pomocą firebase.Android Firebase chat RecyclerView automatycznie przewiń do dołu po dodaniu nowego elementu
Próbowałem zbadać ten problem, ale nie mogę znaleźć dobrych rozwiązań.
nadzieję, że ktoś może mi pomóc.
Mój problem Chcę, aby funkcja RecyclerView automatycznie przewijała po dodaniu nowego elementu.
Oto mój kod.
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.chatlayoutchat, container, false);
Connectivity connectivity=new Connectivity();
if(connectivity.isConnected(getActivity())) {
if(getArguments() != null) {
Firebase.setAndroidContext(this.getActivity());
String ccustomersid = getArguments().getString("customersid");
String creferralae = getArguments().getString("referralae");
String ccustomersname = getArguments().getString("customersname");
customersid = ccustomersid;
referralae = creferralae;
customersname = ccustomersname;
Firebase.setAndroidContext(this.getActivity());
editText = (EditText) rootView.findViewById(R.id.editText);
sendbutton = (Button) rootView.findViewById(R.id.button);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
RecyclerView.LayoutManager layoutmgr = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutmgr);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
//linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
mRecyclerView.setLayoutManager(linearLayoutManager);
from_user = customersid;
to_user = referralae;
LoggedInUser = customersname;
//Log.v("NODE CREATED:", from_user + " " + to_user);
ref_chatchildnode1 = firebase_chatnode.child(from_user + " " + to_user);
//ref_chatchildnode2 = firebase_chatnode.child(to_user + " " + from_user);
sendbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
newmsg = editText.getText().toString().trim();
ChatModel m = new ChatModel();
m.setSender(LoggedInUser);
m.setMessage(newmsg);
ref_chatchildnode1.push().setValue(m);
//ref_chatchildnode2.push().setValue(m);
editText.setText("");
}
});
ref_chatchildnode1.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ChatModel chatmsg = dataSnapshot.getValue(ChatModel.class);
chatmsgsList.add(chatmsg);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}else{
nointernet();
}
showGlobalContextActionBar();
return rootView;
}
@Override
public void onStart() {
super.onStart();
mFirebaseAdapter1 = new FirebaseRecyclerAdapter<ChatModel, ChatMessageViewHolder>(ChatModel.class,
R.layout.textview,
ChatMessageViewHolder.class,
ref_chatchildnode1) {
@Override
protected void populateViewHolder(ChatMessageViewHolder chatMessageViewHolder, ChatModel m, int i) {
chatMessageViewHolder.sender.setText(m.getSender());
chatMessageViewHolder.msg.setText(m.getMessage());
}
};
mRecyclerView.setAdapter(mFirebaseAdapter1);
}
perfect .. thanks .. – Joehamir
Zostanie przewinięte, jeśli dodasz 1 nową wiadomość. jeśli masz 6 nieprzeczytanych wiadomości i klikniesz, aby je przeczytać, pokaże się pierwsza nieprzeczytana wiadomość, a reszta 5 będziesz musiał ręcznie przewinąć, aby zobaczyć na dole – AlwaysConfused