Activity通常有一个ViewModel,在使用RecyclerView的时候要写一个Adapter,在Adapter里也要处理一些数据。但是(好像)在Adapter类中没有直接获取ViewModel的办法,所以这里提供一个参考。
首先看到ViewModelProvider的参数类型是一个ViewModelStoreOwner,如果是在Activity中,我们直接传入this就可以了。但是在Adapter中this并不是一个Activity,所以类型不匹配。
首先在Adapter类中添加一个静态变量:
companion object {
var viewModelStoreOwner: AppIconSettingActivity? = null
}
然后在MainActivity的onCreate方法中添加
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.your_activity)
AppIconAdapter.viewModelStoreOwner = this
}
最后在Adapter类的onCreateViewHolder方法中获取viewModel:
private lateinit var viewModel: SettingViewModel
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.your_layout, parent, false)
val viewHolder = ViewHolder(view)
viewModel = ViewModelProvider(viewModelStoreOwner!!).get(YourViewModel::class.java)
return viewHolder
}
这样就可以使用viewModel了。
|