MVVM.recyclerview列表点击按钮请求另一个接口数据添加数据到列表内
时间: 2023-07-16 21:12:56 浏览: 102
点击按钮为listview添加数据
在 MVVM 架构中,你需要在 ViewModel 中处理列表数据和接口请求的逻辑。假设你有一个 RecyclerView,其中每个 item 都有一个按钮,点击该按钮会触发另一个接口请求并将返回的数据添加到列表中。
首先,在 ViewModel 中创建一个函数来处理按钮点击事件,并在该函数中进行接口请求。例如:
```
fun onButtonClick(item: MyItem) {
// 发起接口请求
apiService.getData(item.id).enqueue(object : Callback<Data> {
override fun onResponse(call: Call<Data>, response: Response<Data>) {
if (response.isSuccessful) {
val newData = response.body()
// 将新数据添加到列表中
val newList = mutableListOf<MyItem>()
newList.addAll(items.value ?: emptyList())
newList.add(MyItem(newData))
items.postValue(newList)
} else {
// 处理请求失败的情况
}
}
override fun onFailure(call: Call<Data>, t: Throwable) {
// 处理请求失败的情况
}
})
}
```
在这个例子中,我们假设你已经在 ViewModel 中创建了一个 MutableLiveData<List<MyItem>> 类型的变量来存储 RecyclerView 的数据。当按钮被点击时,我们首先发起接口请求,获取到新的数据,然后将其添加到原有数据列表中。注意使用 `postValue()` 函数来更新 LiveData,以保证在主线程中更新 UI。
接下来,在 RecyclerView 的 Adapter 中,你需要将每个 item 的按钮点击事件传递给 ViewModel。例如:
```
class MyAdapter(private val viewModel: MyViewModel) : RecyclerView.Adapter<MyViewHolder>() {
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = getItem(position)
holder.bind(item)
holder.button.setOnClickListener {
viewModel.onButtonClick(item)
}
}
}
```
在这个例子中,我们假设你已经在 Adapter 中创建了一个 ViewHolder 类型为 `MyViewHolder`,并且在该 ViewHolder 中包含了一个按钮。当按钮被点击时,我们将对应的 item 传递给 ViewModel 中的 `onButtonClick()` 函数。
通过这种方式,你就可以在 MVVM 架构中处理 RecyclerView 列表中的按钮点击事件,并在触发接口请求后将数据添加到列表中。
阅读全文