簡體   English   中英

recyclerViewAdapter.getItemCount() 即使內部有對象也返回 0?

[英]recyclerViewAdapter.getItemCount() returning 0 even when it has objects inside?

我正在構建一個帶有RecyclerViewFragment ,它顯示從我的數據庫中檢索到的通知。 一切正常,除了這行代碼:

問題

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();
}

注意:我已經在全局 scope 中初始化了變量本身,以便稍后在代碼中Override適當的方法。

提前致謝: :)

將適配器分配給 recyclerView 時沒有創建視圖。 我的建議是在onCreateViewonViewCreated之間拆分邏輯

@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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM