#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()
нем всегда возвращается 05. @GauthamM Кажется, я не могу понять причину этого, это очень странно
Ответ №1:
вы должны поместить свой класс адаптера, чтобы другим было легко помогать, но в любом случае. вы передали ReportItems конструктору адаптера в onCreate(), но я не вижу, чтобы вы инициализировали его и не помещали никаких элементов в список, попробуйте инициализировать его и поместить любой элемент в список ReportItems в методе onCreate(), прежде чем передавать его конструктору адаптера
Комментарии:
1. Я только хочу поместить в него элементы внутри метода userviewmodel.getAllUsers.observe(), который является асинхронным.