Я вижу, что этот вопрос задают несколько раз, но, возможно, из-за того, что я использую библиотеку Group ie для добавления элементов в свой адаптер, я не могу отменить выбор других элементов, когда один из них выбран ( аналогично функциональности радиокнопки). Я пытаюсь уведомить адаптер об изменениях и немного узнать положение выбранного элемента, но я думаю, что мне все еще может что-то не хватать, если кто-то может указать мне на это, пожалуйста.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
rvOptions.layoutManager = LinearLayoutManager(activity)
adapter = GroupAdapter()
rvOptions.adapter = adapter
viewModel = ViewModelProviders.of(activity as MainActivity).get(TestViewModel::class.java)
val myViewModel = ViewModelProvider(
this, MyViewModelFactoryForHashMap(arguments?.getString("headerText"))
).get(TestViewModel::class.java)
myViewModel.userMutableLiveData.observe(this, userListUpdateObserver)
}
private val userListUpdateObserver: Observer<Array<ModelTest>?> =
Observer { userArrayList ->
for (s in userArrayList!!) {
adapter.add(
RecyclerDialogOptionsItem(
activity as MainActivity,
s.title,
s.selected!!,
this@MyDialogFragment
)
)
}
}
override fun onClickItem( position: Int) {
adapter.notifyDataSetChanged()
}
}
И вот мой адаптер, так что идея заключается в том, что когда один из элементов находится в выбранном состоянии, связанный с ним imageView будет видимым, а для всех остальных станет невидимым.
class RecyclerDialogOptionsItem(
private val activity: MainActivity,
private val title: String?,
private var selected: Boolean,
private val adapterListener: AdapterListener
) : Item<GroupieViewHolder>() {
companion object {
var clickListener: AdapterListener? = null
}
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
var selected_position = -1;
viewHolder.apply {
with(viewHolder.itemView) {
tvTitle.text = title
clickListener = adapterListener
itemView.setOnClickListener {
clickListener?.onClickItem(adapterPosition)
selected = true
selected_position = position
if (selected) {
ivChecked.visible()
} else {
ivChecked.invisible()
}
}
}
selected_position = adapterPosition
}
}
override fun getLayout() = R.layout.rv_options_item_row
interface AdapterListener {
fun onClickItem(position: Int)
}
}
Большое спасибо.