Построитель опций состоит из метода setQuery, который принимает ссылку на базу данных и объект модели; setLifecycleOwner, который выполняет действие, которое запускает обновления адаптера.
аю приложение для чата на Android, которое использует Google Firebase для хранения сообщений, которые пользователи пишут друг другу. Чтобы отобразить эти сообщения пользователям, я прочитал их из базы данных и организовал их в пользовательский ListView с помощью ListAdapter. Это работало нормально, пока я не обновил свои зависимости, в частности Firebase UI, до:
com.firebaseui:firebase-ui:3.1.0
Теперь код для построения адаптера списка не работает:
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()));
}
};
Чтобы исправить эту проблему, я обновил код, чтобы он соответствовал новым требованиям пользовательского интерфейса Firebase, сделав код:
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()));
}
};
Этот код теперь хорошо компилируется, но просмотр списка не отображает данные. Есть ли конкретный правильный способ использования новой зависимости пользовательского интерфейса firebase для создания адаптера списка?