Android Studio(Kotlin,ViewBinding)中RecyclerView无数据显示问题
新手遇到这种没报错但啥都不显示的情况,大概率是漏了基础配置或者数据没到位,按下面的顺序查:
先查RecyclerView的基础配置
你在主Activity里有没有给RecyclerView同时设置LayoutManager和Adapter?比如必须写这两行:recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(yourWeatherAdapter);很多人只初始化了Adapter但忘了加LayoutManager,RecyclerView不知道怎么排版,直接就空着。
检查数据有没有真的到Adapter里
看你获取天气数据的函数,要是是网络请求这种异步操作,数据回来后有没有把数据塞给Adapter,然后调用notifyDataSetChanged()?
比如你Adapter里有个setData(List<Weather> data)方法,要在数据回调后调用这个方法更新数据集,再喊Adapter刷新。要是只初始化了空Adapter,数据没传进去,或者传了没喊刷新,肯定啥都看不到。扒一扒Adapter的核心方法写对没
看你Adapter的代码:getItemCount()是不是返回数据集的真实长度?比如你的数据集是mWeatherList,那得返回mWeatherList.size(),别写成固定0或者别的数了。onCreateViewHolder()里的item布局ID有没有写错?比如把R.layout.item_hourly_weather写成别的空布局了,那加载出来也是空的。onBindViewHolder()里有没有给控件赋值?比如温度、天气图标这些,别光拿到holder就完事了,得把数据塞到TextView、ImageView里啊。
检查item布局的高度
要是item布局用了wrap_content但内容是空,或者用ConstraintLayout的时候高度设成0dp没加约束,那即使有数据,item也会缩成一条线甚至看不见。可以先把item高度设成固定值比如80dp试试,能显示再调布局。确认数据请求真的拿到数据了
在获取数据的函数里加个日志,比如Log.d("Weather", "拿到的数据:" + weatherData),看看控制台有没有打印出有效数据。要是网络请求失败、接口返回空,Adapter自然没东西显示,而且这种情况一般不会报错。
内容的提问来源于stack exchange,提问作者Harsh Shrimali

