2016-07-19 16 views
7

ちょっと、私はfirebaseデータベースに毎日追加する最新のデータを表示するアプリを開発しています。最新のデータは、recyclerviewの上部に表示されます。ここでは、現在のデータベース内の100個のノードがあることを前提としていますどのノードがfirebasefirebase and recyclerviewによるアンドロイドページ設定

enter image description here

に似ています。アプリケーションが開くと、ノード100〜80にデータストアが取得されます。ユーザーがスクロールすると、ノード79〜59などに格納されている最新のデータが取得されます。

は、今私は私が最後の21の項目が、どのように制限するクエリを変更した場合、私は79位で、ノードのキーを取得することができます

Query jokesQuery = FirebaseDatabase.getInstance().getReference().child("hindi-jokes").orderByKey().limitToLast(20); 

このクエリで最後の20個のノードを取得することができますよ79番目から59番目のノードデータを取得するには、79番目のノードキーを使用しますか?

+0

最後に取得したキーをメモリに保存し、 'startAt(savedKey)'を使うのはどうですか?おそらく 'limitToLast(20)'と組み合わせることができます。保存されたキーを2回表示しないようにしてください。 – Sunshinator

答えて

11

最後に返されるアイテムが「最も古い」ものになるため、endAt()を使用します。

DatabaseReference jokesRef = FirebaseDatabase.getInstance().getReference().child("hindi-jokes"); 
Query jokesQuery = jokesRef.orderByKey().endAt(oldestKeyYouveSeen).limitToLast(20); 

oldestKeyYouveSeenは、アンカーとして知られています。コードでこれを追跡する必要があります。あなたが見た最も古いアイテムのキーに設定します。

最初のクエリと2番目のクエリの両方にあるため、コード内で明示的に1つを除外する必要があることに注意してください。

+0

私が探していたことを正確に答えてくれたFrankに感謝します。しかし、firebase dbにコンテンツを貼り付けると、テキストから新しい行が削除され、すべてのテキストが1行に格納されることに気付きました。とにかくそれをしないようにするには? –

+0

全く異なる質問のようです。しかし、私は改行のエスケープとして "\ n"を使用しようとします。 –

+1

ちょっと@FrankvanPuffelen私は 'oldestKeyYouveSeen'を取得する方法を知りたいですか? –

関連する問題