我们如何实现片段和 Activity 之间的共享视图模型通信,其中 Activity 不是父级
How can we achieve Shared View Model communication between a Fragment and Activity, where the Activity is not the Parent
鉴于 Activity 不是父 Activity。
,我正在尝试实现片段到 Activity 的通信
所以,我有一个 MainActivity
,它有一个名为 ContactListFragment
的片段,当点击 MainActivity
的 BottomNavigationView
上的添加按钮时,我正在打开另一个AddContactActivity
添加联系人。我的要求是当我单击 AddContactActivity
上的保存按钮时,我需要启动与 ContactListFragment
中的服务器的数据同步。我认为最好的方法是为此使用共享视图模型,但在那种情况下,我应该如何创建视图模型以便生命周期所有者不被更改?
我考虑过使用 Application Context
作为所有者,但我觉得这对于这样的任务来说有点矫枉过正,而且当其他模块被添加到项目中时,它可能会产生一些后果。
那么有没有一种方法可以有效地实现这种方法呢?谢谢。
使用需要同步的 object/objects/Data 类型编写接口 class
interface OnSaveClickListener {
fun onSaveClicked(contact: Contact)
}
现在在 ContactListFragment 中 class
class ContactListFragment : Fragment(), OnSaveClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity as AddContactACtivity).mOnSaveClickListener = this
}
override fun onSaveClicked(contact: Contact) {
// Whatever you want to do with the data
}
}
在AddContactActivity中,
class AddContactActivity {
var mOnSaveClickListener : OnSaveClickListener? = null
private void whenYouClickSave(contact: Contact){
mOnSaveClickListener?.onSaveClicked(contact)
}
鉴于 Activity 不是父 Activity。
,我正在尝试实现片段到 Activity 的通信所以,我有一个 MainActivity
,它有一个名为 ContactListFragment
的片段,当点击 MainActivity
的 BottomNavigationView
上的添加按钮时,我正在打开另一个AddContactActivity
添加联系人。我的要求是当我单击 AddContactActivity
上的保存按钮时,我需要启动与 ContactListFragment
中的服务器的数据同步。我认为最好的方法是为此使用共享视图模型,但在那种情况下,我应该如何创建视图模型以便生命周期所有者不被更改?
我考虑过使用 Application Context
作为所有者,但我觉得这对于这样的任务来说有点矫枉过正,而且当其他模块被添加到项目中时,它可能会产生一些后果。
那么有没有一种方法可以有效地实现这种方法呢?谢谢。
使用需要同步的 object/objects/Data 类型编写接口 class
interface OnSaveClickListener {
fun onSaveClicked(contact: Contact)
}
现在在 ContactListFragment 中 class
class ContactListFragment : Fragment(), OnSaveClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity as AddContactACtivity).mOnSaveClickListener = this
}
override fun onSaveClicked(contact: Contact) {
// Whatever you want to do with the data
}
}
在AddContactActivity中,
class AddContactActivity {
var mOnSaveClickListener : OnSaveClickListener? = null
private void whenYouClickSave(contact: Contact){
mOnSaveClickListener?.onSaveClicked(contact)
}