You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何在点击返回键后刷新ScrollView/LinearLayout的收藏城市列表

解决方案

你的需求核心是从WeatherActivity返回原页面时触发收藏列表的刷新,以下是两种可直接落地的实现方式:

方案1:利用onResume生命周期自动刷新(最简实现)

原页面每次从后台回到前台时都会触发onResume生命周期,你只需要重写该方法调用已有的刷新逻辑即可:

// 在你的主Activity中添加这段代码
override fun onResume() {
    super.onResume()
    getFavouriteCities()
}

该方案不需要修改其他业务逻辑,只要页面可见就会自动同步最新的收藏列表,完全覆盖添加收藏后返回的场景。

方案2:使用Activity Result API实现按需刷新(性能更优)

如果你不需要每次回到页面都刷新,仅在WeatherActivity中确实修改了收藏列表时才触发刷新,可以用这套实现:

  1. 首先在主Activity中注册返回结果监听:
private val weatherLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        // 仅当WeatherActivity返回修改成功标识时才刷新列表
        getFavouriteCities()
    }
}
  1. 修改原有的页面跳转逻辑,用注册好的启动器打开WeatherActivity:
fun startActivity(city: CityObject) {
    runOnUiThread {
        val intent = Intent(this, WeatherActivity::class.java)
        intent.putExtra("CITY_OBJECT", city)
        weatherLauncher.launch(intent)
    }
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:09:00