3

我創建了一個工作正常的適配器。現在,我需要計算適配器中的數據項數量。我正在使用函數getItemcount(),但我每次都得到0。此外,我正在使用Firebase處理我的數據庫。Adapter上的getItemCount()返回0

final Firebase mRoot = new Firebase(FIREBASE_URL); 
    mPosts= mRoot.child("posts"); 
    rvPosts.setHasFixedSize(true); //for performance improvement 
    rvPosts.setLayoutManager(new LinearLayoutManager(this)); //for vertical list 

    postAdapter = new FirebaseRecyclerAdapter<Hello, PostViewHolder>(Hello.class, R.layout.view_hello, PostViewHolder.class, mPosts.orderByChild("postedBy")) { 

      @Override 
      protected void populateViewHolder(final PostViewHolder postViewHolder, final Hello hello, int i) { 
       //do something 
     } 
     }; 
     rvPosts.setAdapter(postAdapter); 
     int postForSelect = postAdapter.getItemCount(); 

可能是什麼問題?

+0

您將列表設置爲適配器的位置。我可以知道什麼是mPost ..? – Moinkhan

+0

@Moinkhan我編輯了這個問題。請看看。 – TeeKay

+0

嘿!我正在學習一個教程,他們使用了某個版本的領域。當我嘗試應用他們所做的一切時,我的getItemCount()返回零。我發現這是由於領域的版本。所以也許你需要檢查一下。 –

回答

0

請檢查YOUT getItemCountMethod和參考,爲列表的大小,你所使用的適配器

@Override 
public int getItemCount() { 
    return list.size(); 
} 
+0

getItemCount()是一個內置功能。 – TeeKay

+0

另外,如果我實現這種方法,應該寫什麼來代替列表? – TeeKay

+0

你nedd覆蓋它,並在列表的位置添加您的arraylist,您正在使用它顯示在您的適配器 –

3

FirebaseRecyclerAdapter異步從數據庫到您的應用程序的數據同步。當您打印項目數量時,還沒有任何數據同步。

要知道適配器中的數據何時發生變化,您可以註冊一個AdapterDataObserver。例如,在我們的Zero to App talk at I/O,我們使用this snippet,以確保最新的聊天消息將始終可見:

adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      messagesList.smoothScrollToPosition(adapter.getItemCount()); 
     } 
    }); 

我強烈建議你檢查出full code for that minimal app

+0

我正在使用FirebaseIndexRecyclerAdapter 並面對相關的issu,請您參考:http://stackoverflow.com/questions/44091290/ firebaseindexrecycleradapter-ondatachanged-is-called-get-getitemcount-always -r謝謝 – Shirane85