2017-12-20 15 views
1

最初のアクティビティーは、RecyclerView + Firestoreが使用されるニュースフィード画面です。オフライン設定が有効になっています。キャッシュされたデータをリカバリーRecyclerView + Firestore

問題:

それがアプリケーションのホームページやニュース放送ですので、私は内部スキャンとFirestoreデータを取得中にキャッシュされたデータを表示するためのアプリケーションをしたいと思います。 Instagram、Twitterなどと同様...

現在のところ、このアクティビティを開くとき、Firestore Queryと呼ばれ、RecyclerViewでデータをマウントしています。

Firestoreの新しいデータが読み込まれている間、Re​​cyclerviewの最後の更新のキャッシュされたデータを表示する方法があります。

インターネット接続がモバイルの場合、私たちの国では品質が非常に悪いです。私が最初にRecyclerviewを呼び出すことを忘れてしまった場合、接続が安定するまで、Progressbarを長時間ロードしていました。

私のコードは次のとおりです。アダプタFirestore + RecyclerView

編集コード:

/*Firebase*/ 
     mDb = FirebaseFirestore.getInstance(); 
     mDb.collection("IndexTimeline_User").document(mCurrentUser.getUid()).collection("Posts").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { 
      @Override 
      public void onSuccess(QuerySnapshot documentSnapshots) { 

       mQuery = documentSnapshots.getQuery(); 
       mCardFeedList.setAdapter(mAdapter); 


      } 
     }); 
     mDb.setFirestoreSettings(settings); 


     /* Recycler */ 
     mCardFeedList = (RecyclerView) view.findViewById(R.id.explore_tab1_list); 
     mCardFeedList.setHasFixedSize(true); 
     mCardFeedList.setItemViewCacheSize(20); 
     mCardFeedList.setDrawingCacheEnabled(true); 

     mAdapter = new PostsExploreTab1Adapter(mQuery, this){ 

      @Override 
      protected void onDataChanged() { 

       if (getItemCount() == 0) { 
        mCardFeedList.setVisibility(View.GONE); 
        mProgressBar.setVisibility(View.GONE); 
        //mTxtVazio.setVisibility(View.VISIBLE); 

       } else { 
        mCardFeedList.setVisibility(View.VISIBLE); 
        mProgressBar.setVisibility(View.GONE); 
        //mTxtVazio.setVisibility(View.GONE); 
       } 


      } 
     }; 

     llmanager = new LinearLayoutManager(getActivity()); 
     mCardFeedList.setLayoutManager(llmanager); 




     /*INICIADO O RECYCLERVIEW E ADAPTER*/ 
     if (mAdapter != null) { 
      mAdapter.startListening(); 

     } 

感謝。

答えて

0

データベースからデータを取得する場合は、addOnSuccessListenerを使用し、データベースからデータがロードされたときにのみアダプタを設定します。つまり、キャッシュからデータを読み込み、新しいデータが完全にロードされたときにのみ、RecyclerViewにデータが追加されます。あなたのコードは次のようになります:

yourRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() { 
    @Override 
    public void onSuccess(DocumentSnapshot documentSnapshot) { 
     //get data 
     mCardFeedList.setAdapter(mAdapter); 
    } 
}); 
+0

ここでこのクエリを実行しますか?クエリを設定しますか? @AlexMamo – TiagoIB

+0

もし 'yourRef'がそうであれば、' get() 'メソッドを使用してください(mQuery = mDb.collection(" IndexTimeline_User ")。 'addOnSuccessListener'を実行します。 –

+0

私の言及は質問とまったく同じです。それはうまくいくのでしょうか? http://prntscr.com/hqj4zt @AlexMamo – TiagoIB

関連する問題