Dyl*_*ane 10 java android firebase firebase-realtime-database firebaseui
我在Android上制作了一个聊天应用程序,它使用google firebase来存储用户互相写入的消息.要向用户显示这些消息,我从数据库中读取这些消息,并将它们组织到带有ListAdapter的自定义ListView中.这工作正常,直到我更新我的依赖项,特别是firebase ui到:
com.firebaseui:firebase-ui:3.1.0
Run Code Online (Sandbox Code Playgroud)
现在构建列表适配器的代码不起作用,是:
adapter = new FirebaseListAdapter<ChatMessage>(FirebaseDatabase.getInstance().getReference("Lobbies").child(leaderID).child("Messages"), ChatMessage.class, R.layout.message, this) {
@Override
protected void populateView(View v, ChatMessage model, int position) {
// Get references to the views of message.xml
TextView messageText = (TextView)v.findViewById(R.id.message_text);
TextView messageUser = (TextView)v.findViewById(R.id.message_user);
TextView messageTime = (TextView)v.findViewById(R.id.message_time);
// Set their text
messageText.setText(model.getMessageText());
messageUser.setText(model.getMessageUser());
// Format the date before showing it
messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)",
model.getMessageTime()));
}
};
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我更新了代码以符合新的firebase ui要求,使代码变为:
FirebaseListOptions<ChatMessage> options = new FirebaseListOptions.Builder<ChatMessage>()
.setQuery(FirebaseDatabase.getInstance().getReference("Lobbies").child(leaderID).child("Messages"), ChatMessage.class).setLayout(R.layout.message).build();
adapter = new FirebaseListAdapter<ChatMessage>(options) {
@Override
protected void populateView(View v, ChatMessage model, int position) {
// Get references to the views of message.xml
TextView messageText = v.findViewById(R.id.message_text);
TextView messageUser = v.findViewById(R.id.message_user);
TextView messageTime = v.findViewById(R.id.message_time);
// Set their text
messageText.setText(model.getMessageText());
messageUser.setText(model.getMessageUser());
// Format the date before showing it
messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)",
model.getMessageTime()));
}
};
Run Code Online (Sandbox Code Playgroud)
此代码现在编译正常,但listview不显示数据.是否有一种特定的正确方法来使用新的firebase ui依赖项来制作列表适配器?
Pet*_*dad 17
你需要使用这个:
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
Run Code Online (Sandbox Code Playgroud)
由于FirebaseListAdapter
使用了监听器来检查在火力数据库的更改,然后被监听,你需要添加数据adapter.startListening()
里面onStart()
能够显示在列表视图中的数据.
然后在内部onStop()
(当活动停止时),您可以使用adapter.stopListening()
删除适配器中的侦听器和数据.
查看此信息以获取更多信息:Adapter LifeCycle
如果在使用上面的内容后,你得到一个nullpointexception
或者cannot resolve symbol
,你必须声明adapter
为全局变量,请检查以下答案:startListening()中的错误
归档时间: |
|
查看次数: |
3107 次 |
最近记录: |