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

如何在MainActivity的TextView中显示ListView的条目数量?

当然可行!这是安卓开发中非常常见的交互场景,我给你推荐几种靠谱的实现方式,按官方推荐程度排序:

方法一:使用Activity Result API(官方推荐,生命周期安全)

这是目前安卓官方推荐的跨Activity传递数据的方式,替代了已过时的startActivityForResult方法,能避免生命周期相关的问题。

步骤1:在MainActivity中注册Activity Result Launcher

在MainActivity的代码里,先注册一个用来接收返回数据的Launcher:

// Kotlin示例,Java写法逻辑一致
private val listActivityResultLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    // 确认返回结果有效
    if (result.resultCode == Activity.RESULT_OK) {
        val itemCount = result.data?.getIntExtra("LIST_ITEM_COUNT", 0) ?: 0
        // 更新MainActivity中的TextView,把数量拼接进去
        yourTextView.text = "Verktøy inn/Utlånstatus ($itemCount)"
    }
}

步骤2:点击TextView时启动ListView所在的Activity

给显示"Verktøy inn/Utlånstatus"的TextView设置点击事件:

yourTextView.setOnClickListener {
    val intent = Intent(this, ListViewActivity::class.java)
    listActivityResultLauncher.launch(intent)
}

步骤3:在ListViewActivity中传递条目数量

当用户准备返回MainActivity时(比如点击返回键、完成按钮),把ListView的条目数量通过Intent传回:

// 获取ListView的条目数量(假设你已经给ListView设置了Adapter)
val itemCount = yourListView.adapter.count

// 封装数据到Intent
val resultIntent = Intent()
resultIntent.putExtra("LIST_ITEM_COUNT", itemCount)
// 设置返回结果
setResult(Activity.RESULT_OK, resultIntent)
// 关闭当前Activity
finish()

如果要处理用户点击系统返回键的场景,可以重写onBackPressed方法:

override fun onBackPressed() {
    val itemCount = yourListView.adapter.count
    val resultIntent = Intent()
    resultIntent.putExtra("LIST_ITEM_COUNT", itemCount)
    setResult(Activity.RESULT_OK, resultIntent)
    super.onBackPressed()
}
方法二:使用单例类存储数据(适合简单场景)

如果你的场景比较简单,也可以用一个全局单例来存储ListView的条目数量,不过要注意避免内存泄漏问题。

步骤1:创建一个单例类

object AppGlobalData {
    // 用来存储ListView的条目数量
    var listItemCount: Int = 0
}

步骤2:在ListViewActivity中更新单例数据

当ListView的Adapter数据加载完成后,更新单例中的值:

// 假设Adapter已经设置完成
AppGlobalData.listItemCount = yourListView.adapter.count

步骤3:在MainActivity中读取并更新TextView

重写MainActivity的onResume方法,每次回到MainActivity时读取单例中的数据并更新:

override fun onResume() {
    super.onResume()
    val itemCount = AppGlobalData.listItemCount
    yourTextView.text = "Verktøy inn/Utlånstatus ($itemCount)"
}
方法三:使用SharedPreferences(适合需要持久化的场景)

如果需要把条目数量持久化保存(比如重启App后仍能显示),可以用SharedPreferences来存储:

步骤1:在ListViewActivity中保存数量到SharedPreferences

val sharedPref = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE)
sharedPref.edit()
    .putInt("LIST_ITEM_COUNT", yourListView.adapter.count)
    .apply()

步骤2:在MainActivity中读取并更新TextView

同样在onResume方法中读取数据:

override fun onResume() {
    super.onResume()
    val sharedPref = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE)
    val itemCount = sharedPref.getInt("LIST_ITEM_COUNT", 0)
    yourTextView.text = "Verktøy inn/Utlånstatus ($itemCount)"
}

总结

优先推荐方法一(Activity Result API),它是官方设计的标准方案,能更好地适配安卓的生命周期,避免潜在的内存泄漏和数据丢失问题。如果是非常简单的小项目,方法二也可以临时用,但不推荐在复杂项目中使用。方法三适合需要持久化数据的场景。

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:08:54