我有一個包含 2 個片段的專案。我希望將第一個片段的可迭代物件傳遞給第二個片段。使用 navArgs 不是一種選擇,因為它會使程式崩潰。Bundle 似乎只適用于主要資料型別。有沒有辦法解決它,而不使用一些超級hacky解決方案,比如將一個由逗號分隔的所有資料的字串作為字串傳遞?
uj5u.com熱心網友回復:
執行此操作的現代方法是使用ViewModel(此處和此處或使用FragmentResultAPI(最后一個鏈接)。否則,您正在考慮通過父級手動執行此操作Activity-呼叫Activity將您的資料傳遞給另一個 Fragment的函式,那種的事情。
如果這些Fragments是分開的,Activities那么您正在考慮制作資料Parcelable,以便它可以進入 aBundle或序列化(例如Kotlin 序列化庫),以便您可以將其放入 a Bundleas aString或將其保存在磁盤上以便您可以加載它從下Activity。序列化庫是將物件和資料轉換為文本流(以及其他格式,如果您愿意)的一種可靠方法,但是如果您只String需要一個和一些分隔符,例如存盤索引或 ID 串列,則沒有任何問題
uj5u.com熱心網友回復:
您可以使用共享視圖模型。在您的第一個片段中:
<code>class FirstFragment : Fragment() {
private lateinit var viewModel: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel::class.java)
viewModel.setData(yourIterable)
}
}
</code>
In your second fragment:
<code>class SecondFragment : Fragment() {
private lateinit var viewModel: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel::class.java)
val data = viewModel.getData()
}
}
</code>
And your <code>SharedViewModel</code>:
<code>class SharedViewModel : ViewModel() {
private val _data
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/515343.html
標籤:安卓工作室科特林安卓片段
上一篇:使用android-studio安裝時,在模擬器上運行的ReactNativeAndroidApp未連接到Metro捆綁器
