2017-08-15 47 views
-2

ISo我在我的應用程序中有羣聊。我有「房間」和按鈕加入「房間」,當用戶點擊加入按鈕時,所有的舊消息都出現在屏幕上,但我只想顯示新的消息,我正在使用Firebase列表適配器來顯示......一切正常,但只是不要不知道如何顯示空白列表和只有新消息,ty。Android羣聊只顯示空的listview沒有舊消息只是當用戶加入羣組的新消息

 btnJoin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatabaseReference db = FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID); 
      db.child(user.getUid()).setValue(""); 


     } 
    }); 

    btnSend.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatabaseReference db = FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID).child("Messages").push(); 
      db.setValue(new ChatMessage(ePlain.getText().toString(),user.getDisplayName())); 
      ePlain.setText(""); 
      ePlain.requestFocus(); 

     } 
    }); 
    private void displayChat() { 
    btnSend.setVisibility(View.VISIBLE); 
    eventChat.setVisibility(View.VISIBLE); 
    FirebaseListAdapter<ChatMessage> adapter = new FirebaseListAdapter<ChatMessage>(EventDetails.this,ChatMessage.class,R.layout.one_chat_list,FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID).child("Messages")) { 
     @Override 
     protected void populateView(View v, ChatMessage model, int position) { 
      TextView messageTextm,messageUser,messageTime; 
      messageTextm = (TextView) v.findViewById(R.id.chatMessage); 
      messageUser = (TextView)v.findViewById(R.id.chatUserName); 
      messageTime = (TextView)v.findViewById(R.id.message_time); 

      messageTextm.setText(model.getMessageText()); 
      messageUser.setText(model.getMessageUser()); 
      messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm)", model.getMessageTime())); 

     } 
    }; 
    eventChat.setAdapter(adapter); 

} 
    DatabaseReference check = FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID); 
      check.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if(dataSnapshot.hasChild(user.getUid())){ 
         displayChat(); 
        } 
       } 

因此,當用戶點擊加入有消息顯示按鈕列表視圖與所有舊的郵件,他加入之前...和抱歉沒有上傳任何代碼,我是新來的,告訴我,如果你需要別的東西我的代碼 這是我的數據庫結構https://ibb.co/d47D9v

+0

歡迎來到堆棧溢出。當問一個問題時,我們要求你發佈你的代碼,並在適用的地方嘗試過。這會給你最好的幫助。您可能會發現這篇文章有用:https://stackoverflow.com/help/how-to-ask – JCooke

回答

1

您必須在Firebase中記錄時間。首先,您需要跟蹤消息的發佈時間,其次,您需要跟蹤用戶何時加入會議室。然後,當你查詢的信息,您可以

sortBy('time').startAt(timeUserJoined)

編輯 在您的按鈕加入的onClick你

FirebaseDatabase.getInstance().getReference("EventsUsers") 
    .child(uniqEventID).child(user.getUid()).setValue(""); 

的值設置爲當前時間,而不是僅僅增加一個空節點作爲一面旗幟。

然後,當您添加消息時,您還需要添加它添加的時間。所以只需添加這對你已經取得

db.setValue(new ChatMessage(ePlain.getText().toString(), 
    user.getDisplayName()), System.currentTimeMillis()); 

最後,在您的適配器類,你的參考應該更像

FirebaseDatabase.getInstance().getReference("EventsUsers") 
    .child(uniqEventID).child("Messages") 
    .orderBy("time").beginAt(timeUserJoined) 

timeUserJoined是價值的用戶的ID從上面

的關鍵
FirebaseDatabase.getInstance().getReference("EventsUsers").child(uniqEventID) 
    .setSingleValueListener(result-> timeUserJoing = result.value) 

這不是完美的代碼,但我認爲你得到的點

+0

我更新了我的問題,添加了一些代碼 –