安卓天气应用CardView内嵌RecyclerView不显示 求解决方案
安卓天气APP RecyclerView无内容排查步骤
布局配置校验
- 检查RecyclerView高度配置:禁止用
wrap_content作为高度属性,垂直布局下推荐设置android:layout_height="match_parent",如果父布局是LinearLayout需要分配剩余高度,设置android:layout_height="0dp"+android:layout_weight="1"即可,wrap_content会导致RecyclerView测量高度为0无法渲染 - 检查item布局配置:CardView作为根布局的item文件,高度必须设置为
wrap_content或者固定数值,不要设为match_parent,否则单个item会占满全屏,看起来就像没有加载出其他内容 - 必须绑定LayoutManager:RecyclerView强制要求绑定LayoutManager才会渲染内容,不要漏写该配置,示例代码:
// Kotlin 代码示例 weatherRv.layoutManager = LinearLayoutManager(this)// Java 代码示例 weatherRv.setLayoutManager(new LinearLayoutManager(this)); - 若父布局包含ScrollView,需替换为NestedScrollView,同时给RecyclerView添加属性
android:nestedScrollingEnabled="false",避免滑动冲突导致内容不显示
数据与适配器校验
- 断点或打日志确认API请求返回的天气列表不为空,注意天气请求是异步操作,不要在主线程初始化时传入空列表后就不再更新适配器数据
- 确认API请求成功后,已经调用适配器的
notifyDataSetChanged()或对应局部刷新方法通知UI更新,仅修改内存中的列表数据不会触发RecyclerView重绘 - 检查适配器的条目计数方法返回值:Java下
getItemCount()、Kotlin下itemCount必须返回你持有的天气列表长度,不要写死返回0 - 确保你更新数据的适配器实例,和之前绑定到RecyclerView的是同一个实例,不要请求成功后新建适配器却没重新绑定到RecyclerView上
- 若使用ViewBinding/DataBinding,确认你操作的RecyclerView绑定实例和页面加载的布局实例一致,不要拿错绑定对象
线程校验
- 所有适配器更新操作必须在安卓主线程执行,异步请求框架默认回调在子线程的话,要先切到主线程再更新适配器,子线程更新UI不会生效也不会抛出明显报错
内容的提问来源于stack exchange,提问作者Shreeya Dhole
相关产品推荐
相关产品推荐

