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
相关产品推荐
相关产品推荐

