我正在構建一個Fragment顯示RecyclerView從我的資料庫中檢索到的通知。一切正常,除了這行代碼:
問題:
recyclerViewAdapter.getItemCount()
即使RecyclerViewAdapter存在元素,此陳述句也會回傳 0。完整的場景是每當加載片段時,都會Toast彈出帶有適當訊息的訊息,但稍有延遲后,我的資料庫中就會出現第一個通知。
問題:
有沒有一種方法recyclerViewAdapter.getItemCount()可以在所有獲取完成后呼叫該陳述句,因為我的解釋說該塊在活動創建后立即執行,而不是等待配接器確認資料庫中是否有任何通知?
代碼塊:
下面是所有涉及的代碼塊recyclerViewAdapter。
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_notice, container, false);
recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
FirebaseRecyclerOptions<Notice> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Notice>().setQuery(FirebaseDatabase.getInstance().getReference().child("Notice").child(Values.schoolCode).child(Values.student.getClass_txt()), Notice.class).build();
recyclerViewAdapter = new RecyclerViewAdapter(firebaseRecyclerOptions);
recyclerView.setAdapter(recyclerViewAdapter);
if (recyclerViewAdapter.getItemCount() == 0) {
Toast.makeText(getContext(), "No Notice Found", Toast.LENGTH_SHORT).show();
}
return view;
}
@Override
public void onStart() {
super.onStart();
recyclerViewAdapter.startListening();
}
@Override
public void onStop() {
super.onStop();
recyclerViewAdapter.stopListening();
}
注意:我已經在全域范圍內初始化了變數本身,以便Override稍后在代碼中使用適當的方法。
提前致謝!:)
uj5u.com熱心網友回復:
將配接器分配給 recyclerView 時沒有創建視圖。我的建議是在onCreateView和之間分割邏輯onViewCreated
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_notice, container, false);
}
@Override
public onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
FirebaseRecyclerOptions<Notice> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Notice>().setQuery(FirebaseDatabase.getInstance().getReference().child("Notice").child(Values.schoolCode).child(Values.student.getClass_txt()), Notice.class).build();
recyclerViewAdapter = new RecyclerViewAdapter(firebaseRecyclerOptions);
recyclerView.setAdapter(recyclerViewAdapter);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489325.html
標籤:爪哇 安卓 火力基地 firebase-实时数据库 android-recyclerview
