从适配器中的 Rescources 获取字符串

Get a string from Rescources in Adapter

提问人:Joe Pleavin 提问时间:3/23/2022 更新时间:3/23/2022 访问量:2007

问:

尝试从 R.string 中获取一个字符串值以在我的适配器中显示,但只得到一个整数作为回报:

class AlarmListAdapter() :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {

class MyViewHolder(binding: LayoutAlarmBinding) : RecyclerView.ViewHolder(binding.root)

var alarmList = ArrayList<Alarm>()


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    val binding = LayoutAlarmBinding.inflate(LayoutInflater.from(parent.context))
    return MyViewHolder(binding)
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    val currentItem = alarmList[position]
    val recurring = currentItem.repeat


    //set repeat text
    holder.itemView.findViewById<TextView>(R.id.tv_repeat_days).text =
        if (recurring) {
            "${R.string.daily_alarm.}"
        } else {
            "${R.string.once_alarm}"
        }

我还尝试过设置这样的值:

val once : String? =  Resources.getSystem().getString(R.string.once_alarm) ?: "Once"

但在这种情况下,得到:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pleavinseven.alarmclockproject, PID: 16832
android.content.res.Resources$NotFoundException: String resource ID #0x7f1200d0

有没有办法解决这个问题,或者我是否需要以某种方式将此功能移出适配器?

android kotlin android-recyclerview xml-解析 android-adapter

评论


答:

9赞 Hayssam Soussi 3/23/2022 #1

从 获取上下文并调用:ViewgetString

holder.itemView.context.getString(R.string.here)

在您的例子中,您的代码将如下所示:

//set repeat text
holder.itemView.findViewById<TextView>(R.id.tv_repeat_days).text =
     if (recurring) 
         holder.itemView.context.getString(R.string.daily_alarm)
     else 
         holder.itemView.context.getString(R.string.once_alarm)

另一种解决方案是将参数作为参数传递给:ContextAlarmListAdapter

class AlarmListAdapter(val context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
....
//set repeat text
holder.itemView.findViewById<TextView>(R.id.tv_repeat_days).text =
     if (recurring) 
         context.getString(R.string.daily_alarm)
     else 
         context.getString(R.string.once_alarm)
}

评论

2赞 Tenfour04 3/23/2022
无需将返回的字符串包装在 中。”${}”
0赞 Leonardo Sibela 3/16/2023
如果字符串接收到参数时不起作用,则此操作不起作用