如何在FirebaseListAdapter中没有视图填充的情况下关闭进度条



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

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

参见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());
    }
});

相关内容

  • 没有找到相关文章

最新更新