记录日期:2026-08-31
项目仓库:/Users/liang/AndroidStudioProjects/CusumptionMachine
实施分支:fix-menu-dish-list-refresh-crash
主页面下拉刷新时会先清空 mGetDishList,而 DishListAdapter 与页面共同持有该列表。RecyclerView 中仍存在旧的 ViewHolder 和预取位置时,数据数量已经变为 0,可能触发 Invalid view holder adapter position;用户点击尚未消失的旧菜品时,也可能使用旧位置访问空列表并触发 IndexOutOfBoundsException。网络响应越慢,界面与数据不同步的时间窗口越长,因此更容易触发,但网络慢不是根本原因。
DishListAdapter 在主页面初始化时只创建并绑定一次,不再在每次展示菜品时重新创建。updateData() 作为唯一列表更新入口,复制新数据后调用 notifyDataSetChanged(),确保 RecyclerView 状态与条目数量同步。DishBean,不再由 MainActivity 使用旧位置二次访问外部列表。app/src/main/java/com/cpt/cusumption/adapter/DishListAdapter.javaapp/src/main/java/com/cpt/cusumption/activity/MainActivity.javaJAVA_HOME=/Users/liang/Library/Java/JavaVirtualMachines/corretto-1.8.0_482/Contents/Home bash gradlew :app:compileDebugJavaWithJavac:BUILD SUCCESSFUL。JAVA_HOME=/Users/liang/Library/Java/JavaVirtualMachines/corretto-1.8.0_482/Contents/Home bash gradlew :app:testDebugUnitTest :app:assembleDebug:BUILD SUCCESSFUL。app/build/outputs/apk/debug/app-debug.apk。984d4343e1c5297fe0296bd9dc08b2fb2dd3c4aa8343eddfc99f5a4cb0364289。