Reputation: 489
What im doing
Im creating an app, which has a RecyclerView as a menu. Since my app has loacalization, i need to use strings, saved in strings.xml.
Whats the problem?
Trying to pass strings value into the parameter causes the app to crash
What have i tried
Code:
frgSettings.kt
class frgSettings : Fragment() {
var settingsList = listOf(
dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_color_lens),
dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_view_carousel),
)
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_settings, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
rvSettings.apply {
layoutManager = LinearLayoutManager(activity)
adapter = adapterSettings(settingsList)
}
}
}
adapterSettings.kt
class adapterSettings(
var settingsList: List<dataItemsSettings>
) : RecyclerView.Adapter<adapterSettings.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_settings, parent, false)
return SettingsViewHolder(view)
}
override fun getItemCount(): Int {
return settingsList.size
}
override fun onBindViewHolder(holder: SettingsViewHolder, position: Int) {
holder.itemView.apply {
rvTitle.text = settingsList[position].stringTitle
rvDescription.text = settingsList[position].stringDescription
rvIcon.setImageResource(settingsList[position].itemIcon)
}
}
}
dataSettings.kt
data class dataItemsSettings (
var stringTitle: String,
var stringDescription: String,
val itemIcon: Int
)
Upvotes: 2
Views: 657
Reputation: 30595
Try to initialize settingsList
variable in onViewCreated
method:
//...
lateinit var settingsList: List<dataItemsSettings>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
settingsList = listOf(
dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_color_lens),
dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_view_carousel),
)
rvSettings.apply {
layoutManager = LinearLayoutManager(activity)
adapter = adapterSettings(settingsList)
}
}
// ...
Upvotes: 2