BindingAdapter is not working when setting recyclerview adapter

Viewed 181

I try setting the adapter to recycler view using BindingAdapter. So I wrote the codes but it is not called. Here is a two-method in BindingAdapter, and setAdapter is not called but setItemList is called. what's wrong with my code? I don't understand why the setAdapter method is not called.

BindingAdapter

    @BindingAdapter("setAdapter")
    @JvmStatic fun setAdapter(view: RecyclerView, adapter: ListAdapter<FavoriteTrackEntity, RecyclerView.ViewHolder>) {
        showLog("items 11: setAdapter")
        val layoutManager = LinearLayoutManager(view.context)
        view.adapter = adapter
        view.layoutManager = layoutManager
    }

    @BindingAdapter( "setItemList", "setAdapter")
    @JvmStatic fun setItemList(view: RecyclerView, items: List<FavoriteTrackEntity>?,
                               adapter: ListAdapter<FavoriteTrackEntity, RecyclerView.ViewHolder>) {
        showLog("items 11: ${items.toString()}")
        adapter.submitList(items)
        adapter.notifyDataSetChanged()
    }

xml

   <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/favoriteTrackRV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:setAdapter="@{viewmodel.favoriteTrackAdapter}"
        app:setItemList="@{viewmodel.favoriteTrackItemList}"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

ViewModel

    private var _favoriteTrackAdapter :MutableLiveData<FavoriteTrackAdapter> = MutableLiveData()
    val favoriteTrackAdapter : LiveData<FavoriteTrackAdapter> = _favoriteTrackAdapter

    val favoriteTrackItemList : LiveData<List<FavoriteTrackEntity>> = localRepository.observeFavoriteTrackList()

    fun setFavoriteTrackAdapter(){
        val adapter = FavoriteTrackAdapter()
        _favoriteTrackAdapter.value = adapter
    }

Main

    private fun initViewModel(){
        viewModel.setFavoriteTrackAdapter()
    }

showLog("items 11: ${items.toString()}") is called but showLog("items 11: setAdapter") is not called . here is the log message E/RecyclerView: No adapter attached; skipping layout

0 Answers
Related