Reputation: 499
So, I'm creating an app, which has a RecyclerView in the settings. The RecyclerView items, contain a cardview, containing an ImageView, used to represent the item of the RecyclerView. What i need to do is replacing the placeholder ImageView with the newer icon, give trough the fragment that loads the RecyclerView. I created my RecyclerView in Kotlin following this tutorial.
I tried creating a value with type ImageView, Image and Bitmap in the data class, however the functions suggested dont work.
How do you create an ImageView value in a class? How do you change a RecyclerView ImageView content?
dataListIcon.kt
import android.widget.ImageView
data class dataListIcons (
val stringTitle: String,
val stringDescription: String,
val imageIcon: ImageView //Here i tried creating the ImageView value
)
fragmentSettings.kt
class frgSettingsMain : Fragment() {
val listsettings = listOf(
dataListIcon("Option", "Description of option", R.drawable.ic_outline_color_lens_24),
dataListIcon("Option", "Description of option", R.drawable.ic_outline_dashboard_24),
dataListIcon("Option", "Description of option", R.drawable.ic_outline_image_24),
dataListIcon("Option", "Description of option", R.drawable.ic_outline_volume_up_24),
dataListIcon("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()
}
}
adapterSettings.kt
class adapterSettingsMain(
var listsettings: List<dataItems>
) : 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 //TODO
}
}
}
Upvotes: 2
Views: 1793
Reputation: 2550
val imageIcon: ImageView //Here i tried creating the ImageView value
Change ImageView
type to int as R.drawable.ic_outline_color_lens_24
is Integer
type
data class dataListIcons (
val stringTitle: String,
val stringDescription: String,
val imageIcon Int //Here i tried creating the ImageView value
)
Add this Inside your onBindViewHolder(...)
method
override fun onBindViewHolder(holder: SettingsViewHolder, position: Int) {
holder.itemView.apply {
rvSettingsTitle.text = listsettings[position].stringTitle
rvSettingsDescription.text = listsettings[position].stringDescription
rvIcon.setImageResource(listsettings[position].imageIcon);//rvIcon is id of ImageView from R.layout.item_settingsicon
}
}
Add <ImageView..../> inside your R.layout.item_settingsicon
Upvotes: 1
Reputation: 544
Solution 1:
Simply use Glide for image rendering in Imageviews.
It will be more flexible with more features use can use with it.
val imageView : ImageView = ..initialise it..
Glide.with(imageView).placeholder(R.drawable.your_placeholder).into(imageView)
Dependency:
implementation 'com.github.bumptech.glide:glide:4.11.0'
Solution 2:
val imageView : ImageView = ..initialise it..
imageView.setImageResource(R.drawable.your_resource)
Upvotes: 1