Redio button in recyclerview with kotlin, dagger2, retrofit , livedata, MVVM and databinding,I need updated list from videModel and also set selected positions to find it is selected and other on is deselected. please suggest how to select only one in RadioButton in List. here are my adapter:-
class DocTypeListAdapter : RecyclerView.Adapter<DocTypeListAdapter.ViewHolder>() {
private lateinit var postList: List<DriverType>
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DocTypeListAdapter.ViewHolder {
val binding: ItemDocumentTypeBinding =
DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.item_document_type, parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: DocTypeListAdapter.ViewHolder, position: Int) {
holder.bind(postList[position], position, mSelectedItem)
}
override fun getItemCount(): Int {
return if (::postList.isInitialized) postList.size else 0
}
fun updatePostList(postList: List<DriverType>) {
this.postList = postList
notifyDataSetChanged()
}
class ViewHolder(private val binding: ItemDocumentTypeBinding) : RecyclerView.ViewHolder(binding.root) {
private val viewModel = DocTypeListViewModel()
fun bind(post: DriverType, position: Int, selectedPosition: Int) {
// viewModel.bind(post,true)
viewModel.bind(post,position,selectedPosition)
// mRadioButton : RadioButton = binding.radioButton;
viewModel.readioButtonClicked(getAdapterPosition(),position)
binding.viewModel = viewModel
}
}
}
viewModel Like:-
class DocTypeListViewModel : BaseViewModel() {
private val postTitle = MutableLiveData<String>()
private val postBody = MutableLiveData<String>()
val isChecked = MutableLiveData<Boolean>()
private var mSelectedItem = -1
fun bind(post: DriverType, position: Int, selectedPosition: Int) {
postTitle.value = post.driver_type
postBody.value = post.description
if ((selectedPosition == -1 && position == 0))
isChecked.value = true
else
if (selectedPosition == position)
isChecked.value = true
else
isChecked.value = false
}
fun getPostTitle(): MutableLiveData<String> {
return postTitle
}
fun getPostBody(): MutableLiveData<String> {
return postBody
}
fun getIsChecked(): MutableLiveData<Boolean> {
return isChecked
}
fun readioButtonClicked(selectedPosition: Int, pos:Int) {
mSelectedItem = selectedPosition
// mSelectedItem=getAdapterPosition()
// notifyDataSetChanged()
}
}
my layout:-
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:adapter="@{viewModel.getDocTypeListAdapter()}"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/textView9"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
android:id="@+id/recyclerView"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/button"/>
binding adpter:-
@BindingAdapter("adapter")
fun setAdapter(view: RecyclerView, adapter: RecyclerView.Adapter<*>) {
view.adapter = adapter
}