getItemCount () моего адаптера RecyclerView возвращает 0, даже если в нем есть элементы

#java #android #android-recyclerview #android-adapter

#java #Android #android-recyclerview #android-адаптер

Вопрос:

Мой RecyclerView возвращает getItemCount() значение 0, даже если в нем есть элементы. В чем может быть причина?

В Activity

int length = mAdapter.getItemCount();

В адаптере

 @Override
public int getItemCount() {
    return reportlist.size();
}
 

Метод onCreate() в моей деятельности

 
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_report_listing);

mRecyclerView = findViewById(R.id.recyclerView);
flightViewModel = new ViewModelProvider(this).get(FlightViewModel.class);
userViewModel = new ViewModelProvider(this).get(UserViewModel.class);

mLayoutManager = new LinearLayoutManager(ReportListingActivity.this);
mAdapter = new ReportAdapter(reportitems, ReportListingActivity.this);

mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);

userViewModel.getAllUsers().observe(ReportListingActivity.this, new Observer<List<User>>() {
            @Override
            public void onChanged(List<User> users) {
                user_details = getUsers();
                user_name = user_details[0];
                user_id = user_details[1];

                flights = flightViewModel.getFlightReports(user_name,user_id);
                if (flights.size() == 0) return;

                reportitems.clear();
                reportItemsCopy.clear();

                for(int i = 0; i <flights.size();i  ){
                    String flightnumber = flights.get(i).getFlightNumber();
                    String departuredate = flights.get(i).getDate();
                    String status = flights.get(i).getFlight_closure_status();
                    String user_name = flights.get(i).getName();
                    String user_id = flights.get(i).getStaffID();


                    reportitems.add(new ReportItem(flightnumber,departuredate,status, user_name, user_id));


                }
                mAdapter.notifyDataSetChanged();

            }
        });
}


 

Комментарии:

1. вы пробовали проверять содержимое reportlist , когда getItemCount() вызывается?

2. @GauthamM Я пробовал, но он выдает и ошибку — java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 . Я могу видеть элемент в представлении recycler в моей активности, хотя

3. вы уверены, что объекты одинаковые?

4. ДА. Если я нажимаю на кнопку в своей активности, чтобы получить количество элементов, тогда оно возвращает правильное количество. Однако в onCreate() нем всегда возвращается 0

5. @GauthamM Кажется, я не могу понять причину этого, это очень странно

Ответ №1:

вы должны поместить свой класс адаптера, чтобы другим было легко помогать, но в любом случае. вы передали ReportItems конструктору адаптера в onCreate(), но я не вижу, чтобы вы инициализировали его и не помещали никаких элементов в список, попробуйте инициализировать его и поместить любой элемент в список ReportItems в методе onCreate(), прежде чем передавать его конструктору адаптера

Комментарии:

1. Я только хочу поместить в него элементы внутри метода userviewmodel.getAllUsers.observe(), который является асинхронным.