Kotlin中如何在点击返回键后刷新ScrollView/LinearLayout的收藏城市列表
解决方案
你的需求核心是从WeatherActivity返回原页面时触发收藏列表的刷新,以下是两种可直接落地的实现方式:
方案1:利用onResume生命周期自动刷新(最简实现)
原页面每次从后台回到前台时都会触发onResume生命周期,你只需要重写该方法调用已有的刷新逻辑即可:
// 在你的主Activity中添加这段代码 override fun onResume() { super.onResume() getFavouriteCities() }
该方案不需要修改其他业务逻辑,只要页面可见就会自动同步最新的收藏列表,完全覆盖添加收藏后返回的场景。
方案2:使用Activity Result API实现按需刷新(性能更优)
如果你不需要每次回到页面都刷新,仅在WeatherActivity中确实修改了收藏列表时才触发刷新,可以用这套实现:
- 首先在主Activity中注册返回结果监听:
private val weatherLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { // 仅当WeatherActivity返回修改成功标识时才刷新列表 getFavouriteCities() } }
- 修改原有的页面跳转逻辑,用注册好的启动器打开
WeatherActivity:
fun startActivity(city: CityObject) { runOnUiThread { val intent = Intent(this, WeatherActivity::class.java) intent.putExtra("CITY_OBJECT", city) weatherLauncher.launch(intent) } }
- 在
WeatherActivity的收藏添加成功逻辑中,设置返回标识:
// 仅在用户成功添加/删除收藏时调用 setResult(Activity.RESULT_OK)
如果需要监听返回键操作,可以在WeatherActivity中重写onBackPressed方法补充逻辑:
// WeatherActivity中添加 override fun onBackPressed() { // 自定义变量标记收藏列表是否发生变化 if (favouriteListChanged) { setResult(Activity.RESULT_OK) } super.onBackPressed() }
注意事项
你现有的getFavouriteCities方法已经实现了清空原有按钮、重新加载最新收藏数据的逻辑,直接调用即可完成ScrollView的内容刷新,不需要修改该方法的内部实现。
内容的提问来源于stack exchange,提问作者Tomáš Mejzr
相关产品推荐
相关产品推荐

