我在我的应用中使用Firebase实时数据库。我有listView和适配器,适配器的每个视图都从Firebase数据库加载一个项目。但是加载所有数据需要几秒钟(每个项目都有图像和名称)。所以我想向用户显示进度条或其他内容,但我不知道放在哪里。
我考虑使用asynctask或其他东西,但问题是我真的不知道数据的加载位置。我将子事件监听器附加到Firebase数据库引用对象,因此每次添加新子项时,适配器都会更新,但我不知道如何知道所有子项都已完成加载。
希望你了解我并帮助我。
答案 0 :(得分:1)
看到这是一个设置一些数据的函数: -
private void addUserChangeListener() {
*** you can initialize your progress dialog here
// User data change listener
mFirebaseDatabase.child(userId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
// Check for null
if (user == null) {
Log.e(TAG, "User data is null!");
return;
}
Log.e(TAG, "User data is changed!" + user.name + ", " + user.email);
*** here you can check if the progress dialog is not null then close your progress dialog here
// Display newly updated name and email
txtDetails.setText(user.name + ", " + user.email);
// clear edit text
inputEmail.setText("");
inputName.setText("");
toggleButton();
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
***also close your progress dialog here
Log.e(TAG, "Failed to read user", error.toException());
}
});
}