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

Android Studio中选择Menu游轮类型后如何更新TextView显示多个景点

你当前的代码仅为「访问地点」对应的visitingPlace控件绑定了对应游轮的第一个景点资源,因此只会显示单个景点,未实现5个景点拼接的需求。

解决方案

首先在Activity内新增一个批量读取拼接景点字符串的工具方法:

private fun getCombinedVisitingPlaces(resourcePrefix: String): String {
    // 景点之间的分隔符,可按需调整为空格、短横线等
    val separator = "、"
    val placeList = mutableListOf<String>()
    for (index in 1..5) {
        // 根据资源名动态获取字符串资源ID
        val resId = resources.getIdentifier(
            "${resourcePrefix}${index}",
            "string",
            packageName
        )
        // 资源存在才加入列表,避免异常
        if (resId != 0) {
            placeList.add(getString(resId))
        }
    }
    return placeList.joinToString(separator)
}

然后修改onOptionsItemSelected方法中每个分支的景点赋值逻辑:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    val crusePrice = findViewById<TextView>(R.id.cruisePrice)
    val cruiseDuration = findViewById<TextView>(R.id.cruiseDuration)
    val visitingPlace = findViewById<TextView>(R.id.visitingPlace)

    when (item.itemId){
        R.id.bahamasCruise -> {
            // 替换原有的单个景点赋值,传入对应资源前缀
            visitingPlace.text = getCombinedVisitingPlaces("bahamasVP")
            crusePrice.setText(R.string.bahamasCPrice)
            cruiseDuration.setText(R.string.bahamasDuration)
        }
        R.id.caribbeanCruise -> {
            visitingPlace.text = getCombinedVisitingPlaces("caribbeanVP")
            crusePrice.setText(R.string.caribbeanCPrince)
            cruiseDuration.setText(R.string.caribbeanDuration)
        }
        R.id.cubaCruise -> {
            visitingPlace.text = getCombinedVisitingPlaces("cubaCVP")
            crusePrice.setText(R.string.cubaCPrice)
            cruiseDuration.setText(R.string.cubaDuration)
        }
        R.id.samplerCruise -> {
            visitingPlace.text = getCombinedVisitingPlaces("samplersVP")
            crusePrice.setText(R.string.samplersPrice)
            cruiseDuration.setText(R.string.samplersDuration)
        }
        R.id.starCruise -> {
            visitingPlace.text = getCombinedVisitingPlaces("starVP")
            crusePrice.setText(R.string.starCPrice)
            cruiseDuration.setText(R.string.starDuration)
        }
    }
    return super.onOptionsItemSelected(item)
}

可选优化

如果需要严格保证所有景点在同一行展示,不自动换行,可在布局文件中给visitingPlace对应的TextView添加如下属性:

android:maxLines="1"
<!-- 若内容超出控件宽度可加下方属性显示省略号 -->
android:ellipsize="end"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:05