I wanted to change font family of items on a recycler view every time I click a button. So I coded like below.
rbAritaBuri = view.findViewById(R.id.rb_aritaBuri)
rbCafe24 = view.findViewById(R.id.rb_cafe24SurroundAir)
rbAritaBuri.setOnClickListener {
rv_work_preview.tv_work_content.typeface = Typeface.createFromAsset(requireActivity().assets, "fonts/arita_buri.otf")
}
rbCafe24.setOnClickListener {
rv_work_preview.tv_work_content.typeface = Typeface.createFromAsset(requireActivity().assets, "fonts/cafe24_surround_air.ttf")
}
But it changes only the font family of the first item of the recycler view. Is there a way to change fonts of them all together runtime? And please tell me why the code I wrote doesn't work right. Thank you.
If I were in your position, I would:
Put your font changing calls inside of
onBindViewHolder(). If you have to, you could put a bool in there likebuttonClickedand link its value to your buttons.Come up with a good way to force a call to
onBindViewHolder(). SometimesnotifyDataSetChanged()is enough. But in some cases, you might have to remove the adapter by setting it to null and then reset the adapter to its original value.Place that logic from step 2 inside of your buttons'
onClick()s.Edit:
What I mean is, create a var inside the class with the most exterior scope, so outside of oncreate().
Now use your buttons to change that var.
Now inside your onBindViewHolder(), make the font switch.
Now when you want to show the change, call notifyDatasetChanged(). I think maybe the best place to do that would be inside of your buttons. So maybe you'd actually have: