1

What I am trying to achieve: I have an activity that shows orders if exists but if no orders are found it just shows empty screen (Empty RecyclerView), so if the screen is empty I would like to show a msg to the user or just close the activity by finish();

The Problem: I can't find a way to determine if my adapter has any data! getItemCount always returns zero, and I am not using any listData (ArrayList) I am using Firebase so I don't know how to check total number of items present in recycler view. Help!

Code:

  private void loadOrders(String phone) {
    Query getOrdersByUser = requests.orderByChild("phone").equalTo(phone);
    final FirebaseRecyclerOptions<Request> orderOptions = new FirebaseRecyclerOptions.Builder<Request>()
            .setQuery(getOrdersByUser,Request.class).build();

    adapter = new FirebaseRecyclerAdapter<Request, OrderViewHolder>(orderOptions) {


        @Override
        protected void onBindViewHolder(@NonNull final OrderViewHolder orderViewHolder, final int i, @NonNull final Request model) {

            orderViewHolder.txtOrderId.setText("#"+adapter.getRef(i).getKey());



                orderViewHolder.txtOrderStatus.setText(orderStatus);
                orderViewHolder.txtOrderStatus.setTextColor(Color.GREEN);



        }

        @NonNull
        @Override
        public OrderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.order_layout,parent,false);
            return new OrderViewHolder(itemView);
        }

        @Override
        public int getItemCount() {
            return super.getItemCount();
        }
    };
    adapter.startListening();
    adapter.notifyDataSetChanged();

    recyclerView.setAdapter(adapter);



}
  • 1
    Why do you say `getItemCount` always returns zero? How do you check that and where? – Alex Mamo Jun 05 '20 at 15:38
  • @AlexMamo I checked it in Logcat, (When I tried to see it in toast app crashed so) I've tried to see it after setting up everything (adapter and recyclerview), after adapter.startListening(); Inside OnBindViewHolder etc.. some people asked me to put it in OnDataChange but this method isn't available on FirebaseBaseRecyclerView – Adarsh Chakraborty Jun 05 '20 at 16:47
  • No, where exactly in your code are you checking that? Please edit your question and show us where have you placed that Log statement. – Alex Mamo Jun 05 '20 at 16:49
  • @AlexMamo Hey! so to send you screenshot I logged value of getItemCount pretty much everywhere, (onCreate,OnBindViewHolder,After Settingup adapter) and It's working only inside onBindViewHolder. Thanks! I think I can check from onBindViewHolder I got one question tho, As onBindViewHolder gets called everytime user scrolls I am worried if it's okay to perform this check everytime user scroll or there is a better option to check onetime if I got any items in my RecyclerView/adapter. Sorry for my bad English.. – Adarsh Chakraborty Jun 05 '20 at 16:59
  • That's normal behavior. Firebase API is asynchronous. So please check the duplicate to how can you solve this using an `AdapterDataObserver`. – Alex Mamo Jun 05 '20 at 17:43

0 Answers0