android - getString causes error getting from strings.xml

半世苍凉 提交于 2020-08-10 23:09:05

问题


Im currently working on an app which has a RecyclerView for the Settings Menu. My objective is to use strings saved in strings.xml for the RecyclerView, because my app has localization; In my case, i generate the RecyclerView with a list saved in the fragment, which needs strings from string.xml, however, trying to call strings from the xml dosnt work.

How do you pass strings from string.xml as parameters? How can i pass im this scenario?

frgSettingsMain.kt

class frgSettingsMain : Fragment() {
    val listsettings = listOf(
        //using @string/string here doesnt work!
        dataListIcons(@string/..., "Description of option", R.drawable.ic_outline_color_lens_24),
        dataListIcons(I WANT THE STRING HERE, "Description of option", R.drawable.ic_outline_dashboard_24),
        dataListIcons("Option", "Description of option", R.drawable.ic_outline_image_24),
        dataListIcons("Option", "Description of option", R.drawable.ic_outline_volume_up_24),
        dataListIcons("Option", "Description of option", R.drawable.ic_outline_library_music_24)
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        retainInstance = true
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(R.layout.fragment_settingsmain, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        rvSettingsMain.apply {
            layoutManager = LinearLayoutManager(activity)
            adapter = adapterSettingsMain(listsettings)
        }
    }

    companion object {
        fun newInstance(): frgSettingsMain = frgSettingsMain()
    }
}

dataListIcons.kt

data class dataListIcons (
    val stringTitle: String,
    val stringDescription: String,
    val imageIcon: Int
)

adapterSettingsMain.kt

package com.meltixdev.revomusicplayer

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.item_settingsicon.view.*

class adapterSettingsMain(
    var listsettings: List<dataListIcons>
) : RecyclerView.Adapter<adapterSettingsMain.SettingsViewHolder>() {

    inner class SettingsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SettingsViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_settingsicon, parent, false)
        return SettingsViewHolder(view)
    }

    override fun getItemCount(): Int {
        return listsettings.size
    }

    override fun onBindViewHolder(holder: SettingsViewHolder, position: Int) {
        holder.itemView.apply {
            rvSettingsTitle.text = listsettings[position].stringTitle
            rvSettingsDescription.text = listsettings[position].stringDescription
            rvSettingsIcon.setImageResource(listsettings[position].imageIcon)
        }
    }
}

回答1:


use getString(R.string.stringname)

Edit will make some changes to your code

data class dataListIcons (
    val stringTitle: Int,
    val stringDescription: Int,
    val imageIcon: Int
)

val listsettings = listOf(
    
    dataListIcons(R.string.title1, R.string.desription1,   
    R.drawable.ic_outline_color_lens_24),
    dataListIcons(R.string.title2, R.string.desription2, 
    R.drawable.ic_outline_dashboard_24),
    .........
)

in your adapter

holder.itemView.apply {
        rvSettingsTitle.text = this.context.getString(listsettings[position].stringTitle)
        rvSettingsDescription.text = this.context.getString(listsettings[position].stringDescription)
        rvSettingsIcon.setImageResource(listsettings[position].imageIcon)
    }



回答2:


you can always pass the string resource ids.

something like below:

  fun getList(): List<Int> {
    return listOf(R.string.app_name, R.string.app_name, R.string.app_name)
}

and wherever you need to get the string from ids just call

context?.getString(getList()[position])


来源:https://stackoverflow.com/questions/63104247/android-getstring-causes-error-getting-from-strings-xml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!