如何跨片段访问在 MainActivity 中声明的变量?
How do I access my variable declared in the MainActivity across my fragments?
我需要将数据从一个片段发送到另一个片段,但似乎无法解决。
有人有什么想法吗?
下面是 MainActivity.kt 中的一些代码:
lateinit var movieId: String
fun setMovie(movietitle: String){
this.movieId = movietitle
}
fun getMovie(): String {
return movieId
}
这是第一个片段:
var movieId: TextView = view.findViewById<EditText>(R.id.TitleId)
(activity as MainActivity).setMovie(movieId.toString())
这是我要接收字符串的片段:
searchMovieByTitle((activity as MainActivity).getMovie())
还有其他方法可以接收数据吗?
这一定是这里关于 Android 的最常见问题之一,因为最初的设计并不容易将它们连接起来。您已经找到了一个通用的解决方法(通过父级 activity 进行协调),但您最好的选择是开始使用 ViewModels,这是一个 Jetpack 组件,可以抽象出很多工作和复杂度:
This case is never trivial as both fragments need to define some interface description, and the owner activity must bind the two together. In addition, both fragments must handle the scenario where the other fragment is not yet created or visible.
This common pain point can be addressed by using ViewModel
objects. These fragments can share a ViewModel
using their activity scope to handle this communication
(强调我的)
所以是的,它简化了很多东西,它被推荐为标准,你使用的大多数其他东西都使用它,如果你在 2020 年代Android 学习它是一件好事。
(您可能还想查看 LiveData,它允许您在 ViewModel 中放置一个 currentMovie
对象,第二个片段可以 observe
。当第一个片段用电影设置它,第二个片段自动接收新值,并可以做一些事情,比如显示一些信息,进行搜索,或其他)
我需要将数据从一个片段发送到另一个片段,但似乎无法解决。 有人有什么想法吗?
下面是 MainActivity.kt 中的一些代码:
lateinit var movieId: String
fun setMovie(movietitle: String){
this.movieId = movietitle
}
fun getMovie(): String {
return movieId
}
这是第一个片段:
var movieId: TextView = view.findViewById<EditText>(R.id.TitleId)
(activity as MainActivity).setMovie(movieId.toString())
这是我要接收字符串的片段:
searchMovieByTitle((activity as MainActivity).getMovie())
还有其他方法可以接收数据吗?
这一定是这里关于 Android 的最常见问题之一,因为最初的设计并不容易将它们连接起来。您已经找到了一个通用的解决方法(通过父级 activity 进行协调),但您最好的选择是开始使用 ViewModels,这是一个 Jetpack 组件,可以抽象出很多工作和复杂度:
This case is never trivial as both fragments need to define some interface description, and the owner activity must bind the two together. In addition, both fragments must handle the scenario where the other fragment is not yet created or visible.
This common pain point can be addressed by using
ViewModel
objects. These fragments can share aViewModel
using their activity scope to handle this communication
(强调我的)
所以是的,它简化了很多东西,它被推荐为标准,你使用的大多数其他东西都使用它,如果你在 2020 年代Android 学习它是一件好事。
(您可能还想查看 LiveData,它允许您在 ViewModel 中放置一个 currentMovie
对象,第二个片段可以 observe
。当第一个片段用电影设置它,第二个片段自动接收新值,并可以做一些事情,比如显示一些信息,进行搜索,或其他)