【问题标题】:FirebaseRecyclerAdapter doesn't override onDataChangedFirebaseRecyclerAdapter 不会覆盖 onDataChanged
【发布时间】:2018-01-23 18:58:19
【问题描述】:

如果我的数据库仍在加载,则显示加载对话框。我想让我的聊天应用程序工作。我发现我的问题可以通过在我的FirebaseRecyclerAdapter 中覆盖onDataChanged() 来解决,如下面的代码

new FirebaseRecyclerAdapter(...) {

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

@Override
protected void onDataChanged() {

  }

};

但问题是我无法将onDataChanged() 覆盖到我的适配器。 我该如何解决这个问题?请看我下面的截图。

更新: 这是与我的问题相关的全部代码(其他代码不需要发布)。

    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;
    }

}

【问题讨论】:

  • 向我们展示您的整个代码(适配器)
  • 感谢@WaleedAsim 先生。请看我上面更新的帖子。

标签: java android firebase firebase-realtime-database firebaseui


【解决方案1】:

您使用的是旧版本的 firebaseui,而在旧版本中,onDataChanged 不在覆盖方法中。您可以通过单击 ALT+ INS 来查看属于该类的所有覆盖方法。

您需要使用最新的:

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

然后就可以使用onDataChanged等方法了。升级时,您还必须使用FirebaseRecyclerOptions,有关更多信息,请在此处查看本指南:

FirebaseUI for Realtime Database

【讨论】:

  • 感谢您的回答。当我更改 firebaseui 的版本时,其他依赖项变为红色。提示说All gms/firebase libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 11.6.2, 11.0.4. Examples include com.google.android.gms:play-services-basement:11.6.2 and com.google.android.gms:play-services-ads:11.0.4
  • 让我先解决这个问题,然后我会接受您的正确答案。 :-)
  • 终于确认你的答案是正确的。感谢@Peter Haddad先生的帮助。
  • @basaya 没问题,编码愉快!
猜你喜欢
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2021-03-19
  • 2013-05-27
相关资源
最近更新 更多