2017-12-18 80 views
1

如果我的數據庫仍在加載,則顯示加載對話框。那就是我想讓我的chatapp起作用。我發現我的問題,通過以下FirebaseRecyclerAdapter不覆蓋onDataChanged

new FirebaseRecyclerAdapter(...) { 

@Override 
protected void populateViewHolder(...) {...} 

@Override 
protected void onDataChanged() { 

    } 

}; 

在我FirebaseRecyclerAdapter覆蓋onDataChanged()這樣的代碼解決,但問題是我不能覆蓋onDataChanged()我的適配器。 我該如何解決這個問題?請參閱下面的屏幕截圖。

image

更新: 這是我與我的問題,整個代碼(其他代碼是沒有必要發佈)。

public void btn_discussion() { 
     FRRA = new FirebaseRecyclerAdapter<Message, MessageViewHolder>(
       Message.class, 
       R.layout.discussion_q_and_answer, 
       ActivityDiscussion.MessageViewHolder.class, 
       MyDatabase 
     ) { 

      @Override 
      protected void populateViewHolder(ActivityDiscussion.MessageViewHolder viewHolder, Message model, int position) { 
       viewHolder.setContent(model.getContent()); 
       viewHolder.setUsername(model.getUsername()); 
       viewHolder.setTime(myConstructor.LongToDate(model.getTime())); 
      } 

      @Override 
      protected void onDataChanged() { 
       //Write something here 
      } 

     }; 
     msgList.setAdapter(FRRA); 
     msgList.smoothScrollToPosition(FRRA.getItemCount()); 
    } 

RecyclerView.ViewHolder

public static class MessageViewHolder extends RecyclerView.ViewHolder { 
    View view; 
    public MessageViewHolder(View itemView) { 
     super(itemView); 
     this.view = itemView; 
    } 

    private void setContent(String content) { 

     TextView msg = view.findViewById(R.id.comment); 
     msg.setText(content); 
    } 

    private void setUsername(String username) { 

     TextView msg = view.findViewById(R.id.tv_user); 
     msg.setText(username); 
    } 

    private void setTime(String time) { 

     TextView msg = view.findViewById(R.id.tv_time); 
     msg.setText(time); 
    } 
} 

getter和setter Message.java

public class Message { 
    private String content; 
    private String Username; 
    private String time; 
    public Message() {} 
    public Message(String mcontent, String musername, String mtime) { 
     this.content = mcontent; 
     this.Username = musername; 
     this.time = mtime; 
    } 

    public String getContent() { 
     return content; 
    } 

    public void setContent(String message) { 
     this.content = message; 
    } 

    public String getUsername() { 
     return Username; 
    } 

    public void setUsername(String Username) { 
     this.Username = Username; 
    } 

    public String getTime() { 
     return time; 
    } 

    public void setTime(String time) { 
     this.time = time; 
    } 

} 
+0

向我們展示你的整個代碼(適配器) –

+0

感謝@WaleedAsim先生。請參閱我上面更新的帖子。 – basaya

回答

1

您正在使用的firebaseui和舊版本onDataChanged較舊版本不在覆蓋方法中。您可以通過點擊ALT + INS來查看屬於此類的所有重寫方法。

您需要使用最新的一個是這樣的:

implementation 'com.firebaseui:firebase-ui-database:3.1.1' 

,然後你可以使用onDataChanged等方法。當你升級,你將不得不使用FirebaseRecyclerOptions也,以獲得更多信息點擊此處查看該指南:

FirebaseUI for Realtime Database

+0

感謝您的回答。當我更改firebaseui的版本時,其他依賴項變爲紅色。該提示表示,「所有gms/firebase庫必須使用完全相同的版本規範(混合版本可能會導致運行時崩潰)。發現版本11.6.2,11.0.4。例子包括com.google.android.gms:play-services-basement:11.6.2和com.google.android.gms:play-services-ads:11.0.4' – basaya

+0

讓我先解決這個問題,我會接受你的回答在此之後是正確的。 :-) – basaya

+0

最後證實你的回答是正確的..感謝你的幫助Mr.Peter Haddad。 – basaya