Firebase 在滚动时动态加载数据

Posted

技术标签:

【中文标题】Firebase 在滚动时动态加载数据【英文标题】:Firebase load data dynamically on scrolling 【发布时间】:2017-03-14 14:07:18 【问题描述】:

我需要知道如何在使用 Firebase 滚动时动态加载数据。如果我使用 Firebase 查询数据,则必须一次加载所有数据或始终加载数据。我希望按限制使用 Firebase 加载数据,达到此限制后,加载更多数据,越来越多。

它基本上就像 Facebook 的时间线 - 作为一个社交网络。

例如:我想从 Firebase 获取最新的记录,限制为 50。达到此限制后,我将下载接下来的 50 条数据。我想使用 RecyclerView 而不是 FirebaseRecycler 类。

FirebaseRecyclerAdapter 不能解决我的问题。感谢帮助。真的,我需要加载点视图布局的 Facebook 时间轴等数据,并加载点视图数据库的 Firebase 数据(50 到 50。下载 50 个数据,达到限制,将底部布局的更多数据加载到 50)。

你能帮帮我吗?

【问题讨论】:

你有什么尝试,在这里分享,以便人们可以帮助你..... @sushildlh 我什么都不尝试,但我知道如何使用 Firebase 加载数据。但是我不知道如何在滚动和 WITH Firebase 上动态加载数据。这个问题不需要代码理解。 android: Loading data like facebook and twitter的可能重复 【参考方案1】:

Firebase 具有 FirebaseRecyclerAdapter,用于将 RecyclerView 直接连接到 firebase 数据库。有关详细信息,请参阅来自 google 的 FriendlyChat 示例应用程序:https://github.com/firebase/friendlychat

【讨论】:

FirebaseRecyclerAdapter 不能解决我的问题。感谢帮助。真的,我需要加载点视图布局的facebook时间轴等数据,并加载点视图数据库的数据Firebase(50到50。下载50个数据,达到限制,将底部布局的更多数据加载到50个)。【参考方案2】:

可以使用startAt()、endAt()、equalTo()方法,官方链接enter link description here

// Find all dinosaurs that are at least three meters tall.
var ref = firebase.database().ref("dinosaurs");
ref.orderByChild("height").startAt(3).on("child_added", function(snapshot) 
console.log(snapshot.key)
);

回答: https://***.com/a/41583467/1429832

【讨论】:

【参考方案3】:

这工作得很好。 Infinite-Scroll-Endless-Scrolling-Tutorial

    private RecyclerView recyclerView;
    boolean userScrolled=false;

    private boolean loading = true;
    int pastVisiblesItems, visibleItemCount, totalItemCount;

    LinearLayoutManager mLayoutManager;



        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);


        mLayoutManager = new LinearLayoutManager(MainActivity.this);
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);


// Implement scroll listener
public void implementScrollListener() 

    recyclerView
        .addOnScrollListener(new RecyclerView.OnScrollListener() 

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView,
                                             int newState) 

                super.onScrollStateChanged(recyclerView, newState);

                // If scroll state is touch scroll then set userScrolled
                // true
                if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) 
                    userScrolled = true;

                

            

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx,
                                   int dy) 
                super.onScrolled(recyclerView, dx, dy);

                // Here get the child count, item count and visibleitems
                // from layout manager

                visibleItemCount = mLayoutManager.getChildCount();
                totalItemCount = mLayoutManager.getItemCount();
                pastVisiblesItems = mLayoutManager
                        .findFirstVisibleItemPosition();

                // Now check if userScrolled is true and also check if
                // the item is end then update recycler view and set
                // userScrolled to false
                if (userScrolled
                        && (visibleItemCount + pastVisiblesItems) == totalItemCount) 
                    userScrolled = false;

                    RefreshData(oldestPostId);
                
            
        );

【讨论】:

以上是关于Firebase 在滚动时动态加载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何沿滚动动态加载带有项目的iOS iCarousel

jQuery实现滚动时动态加载页面内容

Selenium:在动态加载网页中滚动到页面末尾

动态加载上下滚动数据列表(小程序开发)

具有动态数据初始化的 UiTableviewCell 未正确加载

动态加载内容[重复]