【发布时间】:2020-12-31 22:19:13
【问题描述】:
我试图弄清楚如何在使用刀柄时将整数从片段传递到视图模型。我已经准备好视图模型工厂可以用于此,我不确定如何使用 DI 来完成。
在下面的代码中,我试图弄清楚如何将 albumId 传递给 viewModel。从 API 端点获取数据时将使用 albumId。
片段
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_album_details, container, false)
val albumId = arguments?.getInt("album_id")
viewModel.songs.observe(viewLifecycleOwner) {
view.song_recyclerview.apply {
layoutManager = LinearLayoutManager(this.context)
adapter = SongAdapter(viewModel.songs)
}
}
return view
}
视图模型
class SongViewModel @ViewModelInject constructor(
songRepo: SongRepository,
@Assisted savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
val songs: LiveData<List<Song>> = songRepo.getSongs(1)
}
存储库
class SongRepository constructor(
private val musicService: MusicService
)
{
fun getSongs(album_id: Int): LiveData<List<Song>> {
val data = MutableLiveData<List<Song>>()
musicService.getAlbumTracks(album_id).enqueue(object : Callback<List<Song>> {
override fun onResponse(call: Call<List<Song>>, response: Response<List<Song>>) {
data.value = response.body()
}
override fun onFailure(call: Call<List<Song>>, t: Throwable) {
}
})
return data
}
}
【问题讨论】:
-
您可以使用工厂设计模式来传递数据,但有时会导致内存泄漏。
标签: android mvvm dependency-injection retrofit2 dagger-hilt