Вы вызываете notifyDataSetChanged
до фактической загрузки данных.
В вашем onCreate
вы создаете адаптер, связываете его с вашим представлением и даете ему (изначально пустой) массив для рендеринга. ,В этот момент Android сделает именно это: отобразит вид сетки без элементов.
Затем в prepareView
вы начнете загружать данные и сразу же вызовете notifyDataSetChanged
, который перерисовывает сетку с пустым массивом,так как данные еще не загружены. Затем, как только эти данные возвращаются, вы помещаете их в массив. Но так как вы никогда не сообщаете Android о новых данных, он никогда не перерисовывает представление с новыми данными.
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
uploadPDFS.clear();
if(dataSnapshot.exists()){
for(DataSnapshot is : dataSnapshot.getChildren()){
Map<String, String> map = (Map) is.getValue();
String name = map.get("name");
String author = map.get("author");
String imageUrl = map.get("imageUrl");
String url = map.get("url");
uploadPDF uploadPDF = new uploadPDF(name, author, imageUrl, url);
uploadPDFS.add(uploadPDF);
}
}
gridViewAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
Я также:
- Добавлен вызов
uploadPDFS.clear()
. В противном случае вы получите две копии каждого PDF-файла, если в базовых данных есть какие-либо изменения. Попробуйте, и вы поймете, что я имею в виду. - Добавлен
throw databaseError.toException()
в onCancelled
, потому что игнорировать возможную ошибку - плохая идея.
Также смотрите: