片段显示不同的内容
Fragment display different content
我可以制作一个 Fragment 来根据上一屏幕中选择的内容显示不同的内容吗?
例如:我用ImageView和TextView创建了Fragment。在 MainActivity 中,我单击 Button1,Fragment 打开并显示一些内容,如果我单击 Button2,则打开相同的 Fragment,但显示不同的内容。可以这样做吗?
情况1:如果片段实例不是retained/reused(例如片段对话框),我们只需要在创建片段时通过参数绑定flag/content
fun createAFragment(flag: Int): Fragment {
val fragment = AFragment()
fragment.arguments = Bundle().apply { putString("keyFlag", flag) }
return fragment
}
在 AFragment 的 onViewCreated()
中,我们可以从 arguments
bundle 中读取标志值并将等效数据绑定到图像视图和文本视图中。
我们也可以通过 arguments
将图像资源和文本绑定到片段(参见 Bundle)
我们也可以将此方法应用于 ViewPager 上的片段。
情况2:片段实例保留,比如一个activity上有两个片段,1控制另一个。
在这种情况下,我们应该使用view model to share data between fragments and activity, live data来通知数据变化。
此 Codelab 可能有助于了解 ViewModel 和 LiveData:https://developer.android.com/codelabs/kotlin-android-training-live-data
我可以制作一个 Fragment 来根据上一屏幕中选择的内容显示不同的内容吗?
例如:我用ImageView和TextView创建了Fragment。在 MainActivity 中,我单击 Button1,Fragment 打开并显示一些内容,如果我单击 Button2,则打开相同的 Fragment,但显示不同的内容。可以这样做吗?
情况1:如果片段实例不是retained/reused(例如片段对话框),我们只需要在创建片段时通过参数绑定flag/content
fun createAFragment(flag: Int): Fragment {
val fragment = AFragment()
fragment.arguments = Bundle().apply { putString("keyFlag", flag) }
return fragment
}
在 AFragment 的 onViewCreated()
中,我们可以从 arguments
bundle 中读取标志值并将等效数据绑定到图像视图和文本视图中。
我们也可以通过 arguments
将图像资源和文本绑定到片段(参见 Bundle)
我们也可以将此方法应用于 ViewPager 上的片段。
情况2:片段实例保留,比如一个activity上有两个片段,1控制另一个。 在这种情况下,我们应该使用view model to share data between fragments and activity, live data来通知数据变化。
此 Codelab 可能有助于了解 ViewModel 和 LiveData:https://developer.android.com/codelabs/kotlin-android-training-live-data