请帮用kotlin代码 示例一段 RecyclerView和ViewModel搭配 使用的例子 需要包含RecyclerView.Adapter,RecyclerView.ViewHolder,ViewModel,以及使用RecyclerView的fragment的代码
时间: 2024-09-20 18:14:08 浏览: 61
AndroidRoomCodelab:Codelab使用Room,LiveData,RecyclerView,ViewModel(基于https
在Kotlin中,RecyclerView、ViewModel和Fragment的结合通常用于创建数据驱动的用户界面。下面是一个简单的示例,展示如何在一个Fragment中使用RecyclerView、ViewModel来加载和显示列表数据:
```kotlin
// 首先引入所需的库
import androidx.annotation.NonNull
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import android.os.Bundle
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import timber.log.Timber
@AndroidEntryPoint
class YourFragment : Fragment() {
// ViewModel注入
private lateinit var viewModel: YourViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_recycler_view, container, false)
// 初始化RecyclerView
val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(requireContext())
// 创建Adapter
val adapter = YourAdapter()
// 绑定Adapter到RecyclerView
recyclerView.adapter = adapter
// 获取ViewModel并设置观察者
viewModel.getData().observe(viewLifecycleOwner) { data ->
// 更新Adapter的数据
adapter.submitList(data)
Timber.d("Data updated with ${data.size} items")
}
// 注册ViewModel的数据改变
viewModel.registerForChanges()
return view
}
// ViewModel
@ExperimentalCoroutinesApi
interface YourViewModel {
// 函数获取数据并异步完成
val getData: LiveData<List<Item>>
// 注册观察者以便在数据变化时通知
fun registerForChanges()
}
// Adapter实现
class YourAdapter : RecyclerView.Adapter<YourViewHolder>() {
//...
// 其他必要的Adapter方法,如 onCreateViewHolder, onBindViewHolder等
}
// ViewHolder
class YourViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
//...
}
}
// 数据类
data class Item(val title: String)
阅读全文