FirebaseRecyclerAdapter 不会覆盖 onDataChanged
FirebaseRecyclerAdapter doesn't override onDataChanged
如果我的数据库仍在加载,则显示加载对话框。我想让我的聊天应用程序正常工作。我发现我的问题将通过覆盖 FirebaseRecyclerAdapter
中的 onDataChanged()
来解决,如下面的代码
new FirebaseRecyclerAdapter(...) {
@Override
protected void populateViewHolder(...) {...}
@Override
protected void onDataChanged() {
}
};
但问题是我无法将 onDataChanged()
覆盖到我的适配器。
我该如何解决这个问题?请看下面我的截图。
更新:
这是与我的问题相关的全部代码(post 不需要其他代码)。
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;
}
}
您使用的是 firebaseui
的旧版本,并且在旧版本中 onDataChanged
不在覆盖方法中。可以看到点击ALT+INS可以看到所有属于这个class.
的override方法
您需要使用最新的一个:
implementation 'com.firebaseui:firebase-ui-database:3.1.1'
然后可以使用onDataChanged
等方法。升级时,您还必须使用 FirebaseRecyclerOptions
,有关更多信息,请在此处查看本指南:
如果我的数据库仍在加载,则显示加载对话框。我想让我的聊天应用程序正常工作。我发现我的问题将通过覆盖 FirebaseRecyclerAdapter
中的 onDataChanged()
来解决,如下面的代码
new FirebaseRecyclerAdapter(...) {
@Override
protected void populateViewHolder(...) {...}
@Override
protected void onDataChanged() {
}
};
但问题是我无法将 onDataChanged()
覆盖到我的适配器。
我该如何解决这个问题?请看下面我的截图。
更新: 这是与我的问题相关的全部代码(post 不需要其他代码)。
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;
}
}
您使用的是 firebaseui
的旧版本,并且在旧版本中 onDataChanged
不在覆盖方法中。可以看到点击ALT+INS可以看到所有属于这个class.
您需要使用最新的一个:
implementation 'com.firebaseui:firebase-ui-database:3.1.1'
然后可以使用onDataChanged
等方法。升级时,您还必须使用 FirebaseRecyclerOptions
,有关更多信息,请在此处查看本指南: