Android ¿;为什么recyclerView不立即更新从Firebase获得的数据?

Android ¿;为什么recyclerView不立即更新从Firebase获得的数据?,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在使用一个recyclerView,它可以放大两种类型的视图,以便能够进行聊天,一切正常,但不会立即发送或接收 当我发送消息时,除非单击编辑文本,否则不会收到消息, 这是错误的,因为在聊天中应该立即显示 我的适配器: public class ChatRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public Context context; public

我正在使用一个recyclerView,它可以放大两种类型的视图,以便能够进行聊天,一切正常,但不会立即发送或接收 当我发送消息时,除非单击编辑文本,否则不会收到消息, 这是错误的,因为在聊天中应该立即显示

我的适配器:

     public class ChatRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    public Context context;
    public ArrayList<ChatPersonal> items = new ArrayList<>();
    private String mId;
    private static final int CHAT_RIGHT = 1;
    private static final int CHAT_LEFT = 2;



    public ChatRecyclerAdapter (Context context, ArrayList<ChatPersonal> items, String mId){
        this.context = context;
        this.items = items;
        this.mId = mId;
    }



    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        RecyclerView.ViewHolder holder = null;
        switch (viewType){
            case CHAT_RIGHT:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_chat_right, parent, false);
                holder = new ChatPersonalHolderSender(view);
                break;
            case CHAT_LEFT:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_chat_left, parent, false);
                holder = new ChatPersonalHolder(view);
                break;
        }

        return  holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ChatPersonal mObject = items.get(position);
        int itemViewType = getItemViewType(position);
        switch(itemViewType){
            case CHAT_RIGHT:
                ((ChatPersonalHolderSender) holder).mMENSAJE.setText(mObject.getMessage());
                ((ChatPersonalHolderSender) holder).mHORA.setText(DateUtils.getRelativeTimeSpanString(mObject.getHour()));
                break;
            case CHAT_LEFT:
                ((ChatPersonalHolder) holder).mMENSAJE.setText(mObject.getMessage());
                ((ChatPersonalHolder) holder).mHORA.setText(DateUtils.getRelativeTimeSpanString(mObject.getHour()));
                break;

        }
    }



    @Override
    public int getItemViewType(int position) {
        if(items.get(position).getId().equals(mId)){
            return CHAT_RIGHT;
        }else{
            return CHAT_LEFT;
        }
    }




    @Override
    public int getItemCount() {
        return items.size();
    }



}
公共类ChatRecyclerAdapter扩展了RecyclerView.Adapter{
公共语境;
public ArrayList items=new ArrayList();
私有字符串mId;
私有静态最终int CHAT_RIGHT=1;
私有静态最终int CHAT_左=2;
公共ChatRecyclerAdapter(上下文、ArrayList项、字符串mId){
this.context=上下文;
这个项目=项目;
this.mId=mId;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=空;
RecyclerView.ViewHolder=null;
开关(视图类型){
案例聊天室右:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u item\u chat\u right,parent,false);
holder=新聊天室PersonalHolderSender(视图);
打破
案例聊天室左:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u item\u chat\u left,parent,false);
支架=新支架(视图);
打破
}
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
ChatPersonal mObject=items.get(位置);
int itemViewType=getItemViewType(位置);
开关(itemViewType){
案例聊天室右:
((ChatPersonalHolderSender)holder).mMENSAJE.setText(mObject.getMessage());
((ChatPersonalHolderSender)holder).mHORA.setText(DateUtils.getRelativeTimeSpanString(mObject.getHour());
打破
案例聊天室左:
((ChatPersonalHolder)holder.mMENSAJE.setText(mObject.getMessage());
((ChatPersonalHolder)holder.mHORA.setText(DateUtils.getRelativeTimeSpanString(mObject.getHour());
打破
}
}
@凌驾
public int getItemViewType(int位置){
if(items.get(position.getId().equals(mId)){
返回聊天室右键;
}否则{
回到你的左边;
}
}
@凌驾
public int getItemCount(){
返回items.size();
}
}
这是我聊天课的相关代码:

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat);


     linearLayoutManager = new LinearLayoutManager(ActivityChat.this);
            linearLayoutManager.setStackFromEnd(true);
            mRecyclerView.setLayoutManager(linearLayoutManager);
            mRecyclerView.setHasFixedSize(false);
            adapter = new ChatRecyclerAdapter(getApplicationContext(), items, mId);
            adapter.notifyDataSetChanged();
            mRecyclerView.setAdapter(adapter);




          // send message

        mSentMensaje.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final String message = mEditText.getText().toString();
                    if (!message.isEmpty()) {
                        mChat.setMessage(message);
                        mChat.setHour(System.currentTimeMillis());
                        mChat.setId(mId);

                        if(mUser != null){
                            if(mUser.getIDchat() != null){
                                FirebaseUtils.getCHATT(mUser.getIDchat()).push().setValue(mChat).addOnSuccessListener(ActivityChat.this, new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        mRecyclerView.scrollToPosition(items.size() -1);
                                        adapter.notifyDataSetChanged();
                                        mEditText.setText("");
                                    }
                                });
                            }}


    // retreive message
        if(mUser != null){
        if(mUser.getIDchat() != null){
            FirebaseUtils.getCHATT(mUser.getIDchat()).limitToFirst(50).addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    if (dataSnapshot != null && dataSnapshot.getValue() != null) {
                        try{
                            ChatPersonal model = dataSnapshot.getValue(ChatPersonal.class);
                            items.add(model);
                        } catch (Exception ex) {
                            Log.e(TAG, ex.getMessage());
                        }
                    }
                }

                @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(DatabaseError databaseError) {

                }
            });
        }




// status

 @Override
protected void onStart() {
    super.onStart();

    adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onChanged() {
            super.onChanged();
            mRecyclerView.scrollToPosition(adapter.getItemCount() - 1);
        }
    });


}

@Override
protected void onResume() {
    super.onResume();
    adapter.notifyDataSetChanged();

}

@Override
protected void onPostResume() {
    super.onPostResume();
    adapter.notifyDataSetChanged();
}



  }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u chat);
linearLayoutManager=新的linearLayoutManager(ActivityChat.this);
linearLayoutManager.setStackFromEnd(true);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setHasFixedSize(false);
适配器=新的ChatRecyclerAdapter(getApplicationContext(),items,mId);
adapter.notifyDataSetChanged();
mRecyclerView.setAdapter(适配器);
//发送消息
mSentMensaje.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终字符串消息=mEditText.getText().toString();
如果(!message.isEmpty()){
设置消息(消息);
mChat.setHour(System.currentTimeMillis());
mChat.setId(mId);
if(mUser!=null){
if(mUser.getIDchat()!=null){
FirebaseUtils.getCHATT(mUser.getIDchat()).push().setValue(mChat).addOnSuccessListener(ActivityChat.this,new OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
mRecyclerView.scrollToPosition(items.size()-1);
adapter.notifyDataSetChanged();
mEditText.setText(“”);
}
});
}}
//检索消息
if(mUser!=null){
if(mUser.getIDchat()!=null){
FirebaseUtils.getCHATT(mUser.getIDchat()).limitToFirst(50).addChildEventListener(new ChildEventListener()){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
if(dataSnapshot!=null&&dataSnapshot.getValue()!=null){
试一试{
ChatPersonal模型=dataSnapshot.getValue(ChatPersonal.class);
增加(型号);
}捕获(例外情况除外){
Log.e(标记,例如getMessage());
}
}
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
//地位
@凌驾
受保护的void onStart(){
super.onStart();
registerAdapterDataObserver(新的RecyclerView.AdapterDataObserver(){
@凌驾
更改后的公共无效(){
super.onChanged();
mRecyclerView.scrollToPosition(adapter.getItemCount()-1);
}
});
}
@凌驾
受保护的void onResume(){
super.onResume();