ScrollView嵌套的ListView加载Firestore数据无显示该如何修复?
问题核心原因
- Firestore数据请求是异步执行的,你初始化适配器时传入的是空列表,后续异步请求拿到数据添加到列表后,没有通知适配器刷新,ListView不知道有新数据需要渲染。
- ScrollView嵌套ListView时,ListView高度如果设为
wrap_content会出现计算错误,无法正常展示内容。
修复步骤
1. 异步加载完成后通知适配器刷新
修改getData方法,数据全部添加到列表后调用刷新方法:
public void getData(){ db.collection("ongoing") .whereEqualTo("creatorID", user.getUid()) .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if(task.isSuccessful()){ usersList.clear(); // 先清空旧数据,避免后续重复加载出现重复条目 for(QueryDocumentSnapshot doc : task.getResult()){ usersList.add(new UserItem(doc.getData().get("buyerUsername").toString(), doc.getData().get("timestamp").toString(), doc.getData().get("offerID").toString(), doc.getData().get("isComplete").toString())); } // 新增这行,通知适配器数据已经更新,需要重新渲染列表 adapter.notifyDataSetChanged(); } } }); }
2. 修复ScrollView嵌套ListView的高度问题
修改布局文件中的ListView配置,二选一即可:
- 方案1(简单测试用):给ListView设置固定高度+开启嵌套滚动
<ListView android:layout_width="match_parent" android:layout_height="300dp" android:nestedScrollingEnabled="true" android:id="@+id/listcontainer"/>
- 方案2(长期推荐):把ListView替换为RecyclerView,本身支持嵌套滚动,性能更优,也不会出现高度计算异常。
可选检查项
- 确认
R.layout.userlayout布局文件存在,内部三个TextView的id和适配器中绑定的userlayoutUsername、userlayoutTimestamp、isComplete完全一致。 - 可在
getData的onComplete中加日志打印,确认查询条件正确、确实返回了有效数据,排除无数据的情况。
内容的提问来源于stack exchange,提问作者qwirrr
相关产品推荐
相关产品推荐

