如何在 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.

之间共享方法

另一种方法是将该逻辑提取到另一个对象中,然后在两个片段中都使用该对象。除非该方法与视图操作直接相关,否则这就是我的建议。它还使该方法更易于测试。