Поскольку вы передаете ссылку на Singers
в представление переработчика, ваш parseSnapshot
вызывается для каждого певца.Там вы должны убедиться, что вы проверяете songType
каждого song
дочернего элемента певца, где теперь вы проверяете songType
самих певцов (который никогда не существует, поэтому никогда не входит вблок if
).
Так что это будет примерно так:
Query query = FirebaseDatabase.getInstance().getReference().child("Singer");
options = new FirebaseRecyclerOptions.Builder<ItemModel>().setQuery(query, new SnapshotParser<ItemModel>() {
@NonNull
@Override
public ItemModel parseSnapshot(@NonNull DataSnapshot snapshot) {
String song = "No song found";
for (DataSnapshot songSnapshot: snapshot.getChildren()) {
String songType = songSnapshot.child("songType").getValue(String.class)
if (songType.equals("type01") {
song = songType;
...
Хотя я не уверен, что это то, что вы хотите, потому что вы, кажется, хотитесписок песен, пока вы переходите в список певцов.Вышеуказанное будет работать, только если у каждого певца есть только одна песня type01
(не 0, не больше).
Если это не так, адаптеры в FirebaseUI не будут соответствовать вашим потребностям с вашей текущейструктура данных, так как они показывают список элементов из базы данных, в то время как вы хотите отображать элементы из древовидной структуры.
Два основных варианта, которые приходят на ум в этом случае:
- Создайте свой собственный адаптер, как правило, на основе
ArrayAdapter
, как показано здесь . - Измените структуру данных так, чтобы все песни были в плоском списке(и тогда певец становится собственностью каждой песни).