Как и ответ Фрэнка, вы также можете иметь идентификатор песни String в вашем POJO, и когда вы извлекаете каждый ключ с помощью getKey()
, вы можете сохранить этот ключ в массиве, поэтому, когда вы надуете представления каждой строки, вы нажмите на них, и у них будет уникальный ключ, назначенный каждой песне в списке.
Пример (из ответа Фрэнка вы получите ключ)
private void showData(DataSnapshot dataSnapshot){
for (DataSnapshot ds : dataSnapshot.getChildren()){
System.out.println(ds.getKey());
Songs songs = new Songs();
songs.setSongId(ds.getKey()); // --> Set the song ID that is requested
ArrayList<String> array = new ArrayList<>();
array.add(songs.getSongId()); // --> Set the ID to the song
При этом вы можете назначить каждой песне в списке свой уникальный идентификатор, поэтому, когда вы нажимаете их в своем списке, вы можете получить доступ к их конкретному идентификатору, чтобы получить нужные вам данные.
Редактировать
Я думаю, что в списке ничего не отображается, потому что когда вы инициализируете ваш ArrayAdapter
, вы не передаете извлеченные ему данные, посмотрите на этот конструктор
ArrayAdapter(Context context, int resource, List<T> objects)
И взгляни на свои
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line);
Вам не хватает данных для адаптера, замените их на
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,array);
Поскольку он находится внутри цикла for, вы увидите, что элементы заполняются один за другим; если вы хотите просто сложить все элементы одновременно, переместите эти две строки за пределы цикла for
for (DataSnapshot ds : dataSnapshot.getChildren()){
//...
}
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,array);
listView.setAdapter(adapter);
Кроме того, очень важно - не создавать новый массив при каждом цикле внутри ваших данных, вам нужно создавать новые объекты, которые будут в массиве, но нет необходимости создавать новый массив каждый раз, когда ваш цикл для получения объекта.
Так что переместите вашу декларацию ArrayList за пределы цикла for
ArrayList<String> array = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()){
//...
}
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,array);
listView.setAdapter(adapter);
Кроме того, массив должен быть типа Songs и менять адаптер на пользовательский, но сейчас, я думаю, он должен работать нормально.