如何使用 MVVM 在 Android 中从适配器实现文件上传?
How to implement a File-Upload from an Adapter in Android using MVVM?
我开发了一个 Android-App,它有一个 RecyclerView,RecyclerView 中显示的每个项目代表本地保存的视频。现在,当在 RecyclerView 的其中一项中单击按钮时,文件应该上传到服务器。现在我的问题是:如何使用 MVVM 实现解决方案?
我还创建了一个小图片来描述我的问题:
注意:一个简短的概念性回答就足够了
你的适配器接受一个回调方法来调用一旦按钮被点击,片段然后通过使用 VM 上传,一旦完成,无论成功还是失败你都会提醒你的 UI 做任何事情需要改变。您的视图模型和适配器之间没有直接交互
class MyAdapter constructor(
private val callback: (item: YourType) -> Unit,
) : RecyclerView.Adapter.... {
然后,您可以在 onBind 或任何您为适配器设置按钮的地方调用它,方法是调用:
myButton.setOnClickListener {
callback.invoke(yourItem)
}
通常是这样的格式:
override fun onBindViewHolder(holder: SomeViewHolder, position: Int) {
val yourItem: YourType = items[position]
....
yourButton.setOnClickListener {
callback.invoke(yourItem)
}
}
当您创建适配器时,您现在可以:
myAdapter = MyAdapter () { callback ->
//here, callback will be of type `YourType`
//here, you can do whatever service call you want with your viewmodel, because this is in your fragment
}
总而言之,当点击一个项目时必须发生的事情的逻辑现在转移到 class 使用适配器,通常是片段或 activity。这使得您可以轻松地重用您的适配器,因为它内部不包含任何实际的业务逻辑——您的适配器基本上会通知您的片段:
"有东西被点击了,这是相应的项目"。
你的适配器通知你的片段一个项目被点击,然后你的片段可以决定做什么,在这种情况下它可以将它转移到 Viewmodel 以便它可以执行你需要的任何网络操作并通知UI 该操作的结果,通常这是通过观察实时数据来完成的
我开发了一个 Android-App,它有一个 RecyclerView,RecyclerView 中显示的每个项目代表本地保存的视频。现在,当在 RecyclerView 的其中一项中单击按钮时,文件应该上传到服务器。现在我的问题是:如何使用 MVVM 实现解决方案?
我还创建了一个小图片来描述我的问题:
注意:一个简短的概念性回答就足够了
你的适配器接受一个回调方法来调用一旦按钮被点击,片段然后通过使用 VM 上传,一旦完成,无论成功还是失败你都会提醒你的 UI 做任何事情需要改变。您的视图模型和适配器之间没有直接交互
class MyAdapter constructor(
private val callback: (item: YourType) -> Unit,
) : RecyclerView.Adapter.... {
然后,您可以在 onBind 或任何您为适配器设置按钮的地方调用它,方法是调用:
myButton.setOnClickListener {
callback.invoke(yourItem)
}
通常是这样的格式:
override fun onBindViewHolder(holder: SomeViewHolder, position: Int) {
val yourItem: YourType = items[position]
....
yourButton.setOnClickListener {
callback.invoke(yourItem)
}
}
当您创建适配器时,您现在可以:
myAdapter = MyAdapter () { callback ->
//here, callback will be of type `YourType`
//here, you can do whatever service call you want with your viewmodel, because this is in your fragment
}
总而言之,当点击一个项目时必须发生的事情的逻辑现在转移到 class 使用适配器,通常是片段或 activity。这使得您可以轻松地重用您的适配器,因为它内部不包含任何实际的业务逻辑——您的适配器基本上会通知您的片段: "有东西被点击了,这是相应的项目"。
你的适配器通知你的片段一个项目被点击,然后你的片段可以决定做什么,在这种情况下它可以将它转移到 Viewmodel 以便它可以执行你需要的任何网络操作并通知UI 该操作的结果,通常这是通过观察实时数据来完成的