如何在 Main Activity 中的片段之间共享属性和方法
How to share properties and methods between Fragments in Main Activity
我的 MainActivity
中有两个片段,我想让第一个片段继承第二个片段的方法。这可能吗?
如果没有两个 Fragments 共享同一个父级,那就不行了。您可以创建 Fragment
的实例并将其命名为 BaseFragment
,然后让您正在创建的两个片段成为 BaseFragment
的子级。它不会是同一个实例,但您可以访问相同的方法
Fragment
|
BaseFragment <- you create this and put the methods you want to share here
/\
/ \
FragmentA FragmentB
一种方法可能是让两个片段都委托给同一个对象,这更符合优先组合而不是继承的原则。
这是一个例子:
class FragmentA : Fragment(), SharedMethodsDelegate by SharedMethods {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedMethod()
}
}
class FragmentB : Fragment(), SharedMethodsDelegate by SharedMethods {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedMethod()
}
}
interface SharedMethodsDelegate{
fun sharedMethod()
}
object SharedMethods : SharedMethodsDelegate {
override fun sharedMethod() {
print("hey")
}
}
这种方法的优点是允许您为片段使用不同的基数 类。您甚至可以使用它在片段和 activity.
之间共享方法
另一种方法是将该逻辑提取到另一个对象中,然后在两个片段中都使用该对象。除非该方法与视图操作直接相关,否则这就是我的建议。它还使该方法更易于测试。
我的 MainActivity
中有两个片段,我想让第一个片段继承第二个片段的方法。这可能吗?
如果没有两个 Fragments 共享同一个父级,那就不行了。您可以创建 Fragment
的实例并将其命名为 BaseFragment
,然后让您正在创建的两个片段成为 BaseFragment
的子级。它不会是同一个实例,但您可以访问相同的方法
Fragment
|
BaseFragment <- you create this and put the methods you want to share here
/\
/ \
FragmentA FragmentB
一种方法可能是让两个片段都委托给同一个对象,这更符合优先组合而不是继承的原则。
这是一个例子:
class FragmentA : Fragment(), SharedMethodsDelegate by SharedMethods {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedMethod()
}
}
class FragmentB : Fragment(), SharedMethodsDelegate by SharedMethods {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedMethod()
}
}
interface SharedMethodsDelegate{
fun sharedMethod()
}
object SharedMethods : SharedMethodsDelegate {
override fun sharedMethod() {
print("hey")
}
}
这种方法的优点是允许您为片段使用不同的基数 类。您甚至可以使用它在片段和 activity.
之间共享方法另一种方法是将该逻辑提取到另一个对象中,然后在两个片段中都使用该对象。除非该方法与视图操作直接相关,否则这就是我的建议。它还使该方法更易于测试。