即使FirebaseListAdapter中没有填充视图,如何关闭进度条?

时间:2016-10-23 09:47:47

标签: android firebase firebase-realtime-database firebaseui

我使用FirebaseUI FirebaseListAdapter。加载数据需要一些时间,我想显示一个旋转的圆圈。我可以通过在populateView中将视图可见性设置为不可见来忽略进度条,但如果没有填充视图则它不起作用。如何处理?

1 个答案:

答案 0 :(得分:7)

更新:现在,FirebaseUI适配器具有onDataChanged()方法,您可以覆盖该方法以检测何时完成加载一组数据。

请参阅source code on github。从那里:

  

每次完全处理来自数据库的更新时,都会触发此方法。因此,第一次调用此方法时,已加载初始数据 - 包括根本没有数据可用的情况。每次下次调用该方法时,都会完成一个完整的更新(可能包含对多个子项的更新)。

     

您通常会覆盖此方法以隐藏加载指示符(在初始加载后)或完成对UI元素的批量更新。

FirebaseUI示例应用会覆盖onDataChanged()以隐藏其“加载”指示符:

public void onDataChanged() {
    // If there are no chat messages, show a view that invites the user to add a message.
    mEmptyListMessage.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE);
}

原始回答

FirebaseUI列表适配器在内部使用Firebase ChildEventListener。此侦听器仅针对相关的子事件触发。如果没有孩子,则不会发生任何事件。

您可以通过将附加侦听器附加到传递给适配器的引用/查询来检测此情况。

DatabaseReference list = mDatabase.child("messages");
showSpinner();
mAdapter = new FirebaseListAdapter<Message>(......, list) {
    void populateView(View view, Message message, int position) {
        // the first message was loaded
        hideSpinner();
    }
});
list.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // the initial data is loaded (even if there was none)
        hideSpinner();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});