片段显示不同的内容

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