這個問題在這里已經有了答案: 在片段與其容器活動之間傳遞資料 (16 個回答) 16 小時前關閉。
如何正確地將資料從片段傳輸到活動?我做如下:1-創建一個界面
interface IProfileToActivity {
fun profileInfo(data: AllHeroes.Global)
}
2-然后我在活動中繼承
class ProfileActivity : AppCompatActivity(), IProfileToActivity {
private lateinit var myBinding: ActivityProfileBinding
override fun profileInfo(data: AllHeroes.Global) {
myBinding.tvUsername.text = data.name
myBinding.tvDivision.text = data.rank.rankName
Log.i("Apex Info 3", data.toString())
}
}
3-從片段發送
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as? IProfileToActivity)?.profileInfo(allInfoApexResponse.global)
mHeroesAdapter.heroesList(allAdapterListHero)
}
但什么也沒發生,為什么?我做錯了什么?
uj5u.com熱心網友回復:
您無需在此處創建介面。您可以使用requireActivity()獲取對父活動的參考。使用它您可以訪問您活動的公共欄位和功能。
class ProfileActivity : AppCompatActivity() {
private lateinit var myBinding: ActivityProfileBinding
fun profileInfo(data: AllHeroes.Global) {
myBinding.tvUsername.text = data.name
myBinding.tvDivision.text = data.rank.rankName
Log.i("Apex Info 3", data.toString())
}
}
在你的片段中:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(requireActivity as ProfileToActivity).profileInfo(allInfoApexResponse.global)
mHeroesAdapter.heroesList(allAdapterListHero)
}
uj5u.com熱心網友回復:
有很多方法可以將資料從片段傳遞到活動:
使用共享ViewModel.
A
ViewModel用于以生命周期意識的方式管理和存盤 UI 相關資料。~閱讀更多
class SharedViewModel: ViewModel() {
private val currItems: MutableLiveData<List<Item>> =
MutableLiveData<List<Item>>(listOf())
fun getCurrItem(): LiveData<List<Item>> {
return currItems
}
fun sendCurrItems(items: MutableList<Item>) {
currItems.postValue(items)
}
}
class ItemFragment: Fragment() {
private val sharedModel: SharedViewModel by activityViewModels()
}
MainActivity: AppCompactActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val model = ViewModelProvider(this).get(SharedViewModel::class.java)
}
}
在上面的類中,資料使用MutableList. 這里需要注意的是,上面的類是一個singleton類,即一旦創建,只有在活動結束時才會銷毀。
讓我們假設itemaItemFragment必須從 a 共享到MainActivity
必須實作一個回呼MainActivity。為此,可以使用一個Interface
interface ItemListener{
fun sendItem(item : MutableList<Item>)
}
ItemFragment:
class ItemFragment: Fragment() {
override fun sendItems(items: MutableList<Item>?) {
// Send an Item from here as well as update it
}
// Or just simply call sendItem method.
}
MainActivity:
class MainActivity: AppCompactActivity(){
fun receiveItem(context : Context){
private var mCallback: ItemListener? = null
mCallback = context
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/348580.html
