📅  最后修改于: 2023-12-03 15:08:06.239000             🧑  作者: Mango
在视图模型 Kotlin 中获取上下文
在 Android 中,上下文是一个非常重要的概念,它允许我们获取应用程序的资源,如布局、字符串、颜色和主题。在视图模型中,我们需要上下文来访问这些资源。本文将介绍在视图模型 Kotlin 中获取上下文的不同方法。
AndroidViewModel 是 ViewModel 的子类,它提供了一个 Application 对象作为上下文,可以在 ViewModel 中使用。
class MyViewModel(application: Application) : AndroidViewModel(application) {
// ...
}
使用 AndroidViewModel 很简单,只需在视图模型中声明它,然后将 application 作为参数传递即可。
如果您没有使用 AndroidViewModel,也可以使用 ViewModelProvider 来获取上下文。ViewModelProvider 可以将 Activity 或 Fragment 传递给 ViewModel,从而使 ViewModel 可以使用 Activity 或 Fragment 的 Context。
class MyFragment : Fragment() {
private lateinit var viewModel: MyViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// ...
return view
}
}
class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// ...
setContentView(view)
}
}
使用 ViewModelProvider 很简单,只需传递 Activity 或 Fragment 作为参数,然后获取相应的 ViewModel 即可。
如果您使用了 DataBinding,那么将上下文传递给视图模型就更加容易了。在布局文件中使用 data 标签将视图模型与上下文绑定,然后在视图模型中直接访问它。
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="viewModel" type="com.example.MyViewModel" />
</data>
<!-- ... -->
</layout>
class MyViewModel : ViewModel() {
lateinit var context: Context
fun setContext(context: Context) {
this.context = context
}
// ...
}
使用 DataBinding,您只需将上下文传递给视图模型即可。这使得在视图模型中访问上下文变得非常容易。
在视图模型中获取上下文是一项重要的任务,因为它允许我们访问应用程序的资源。无论您是使用 AndroidViewModel、ViewModelProvider 还是 DataBinding,获取上下文都非常容易。请根据您的需求和应用程序的架构选择最适合您的方法。