Кнопка повторения в обзоре утилит с kotlin, dagger2, дооснащением, liveata, MVVM и привязкой данных, мне нужен обновленный список из videModel, а также установить выбранные позиции, чтобы найти его
выбрано, а другое отключено. Пожалуйста, предложите, как выбрать только один в RadioButton в списке.
вот мой адаптер: -
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 Нравится: -
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()
}
}
мой макет: -
<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"/>
Обязательный адтертер: -
@BindingAdapter("adapter")
fun setAdapter(view: RecyclerView, adapter: RecyclerView.Adapter<*>) {
view.adapter = adapter
}