【问题标题】:getItemCount() of my RecyclerView adapter returns 0 even though I have items in it我的 RecyclerView 适配器的 getItemCount() 返回 0,即使里面有项目
【发布时间】:2021-02-28 12:46:05
【问题描述】:

我的RecyclerView 返回 0 的 getItemCount(),即使我有项目。可能是什么原因?

活动中

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

            }
        });
}


【问题讨论】:

  • 你有没有试过在getItemCount()被调用时检查reportlist的内容?
  • @GauthamM 我试过了,但它给出了错误 - java.lang.IndexOutOfBoundsException: Index: 0, Size: 0。我可以在我的活动的回收站视图中看到该项目
  • 你确定对象是一样的吗?
  • 是的。如果我点击我的活动上的一个按钮来获取项目计数,那么它会返回正确的计数。但是,在onCreate() 中,它总是返回 0
  • @GauthamM 我似乎无法弄清楚这是为什么,这很奇怪

标签: java android android-recyclerview android-adapter


【解决方案1】:

您应该放置您的适配器类,以便其他人可以轻松地提供帮助,但无论如何。 您将 reportItems 传递给 onCreate() 中的适配器构造函数,但我没有看到您已经初始化它并且没有将任何项目放入列表中,尝试对其进行初始化并将任何项目放入 onCreate() 中的 reportItems 列表中) 方法,然后将其传递给适配器构造函数

【讨论】:

  • 我只想将项目放入异步的 userviewmodel.getAllUsers.observe() 方法中。
猜你喜欢
  • 2016-10-22
  • 1970-01-01
  • 2021-05-13
  • 2017-10-09
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多