我对Android比较陌生。我想知道为什么实现侦听器的常见模式是通过活动实现接口,然后将this
传递给需要它的组件(即片段)。类似的东西:
class MainActivity implements OnItemActionListener {
public void OnCreate(Bundle savedInstanceState) {
someFragmentInitialization(this);
}
public void someItemAction() { //do something }
}
class MainFragment {
private OnItemActionListener mListener;
}
我认为在单独的类中实现接口可能更好,而不是活动/片段,只是一个类。然后在片段/活动中实例化该类,并在实例化中传递上下文(如果需要)。类似的东西:
class SomeImplementationClass implements OnItemActionListener {
public void someItemAction() { //do something}
}
class MainFragment {
private OnItemActionListener mListener;
protected void onCreate(Bundle savedInstanceState) {
mListener = new SomeImplementationClass(getContext());
}
}
这是关于Android生态系统/生命周期的吗?
答案 0 :(得分:1)
我想知道为什么实现侦听器的常见模式是通过活动实现接口,然后将其传递给需要它的组件(即片段)。
这是 a 模式,有时您会看到,特别是在教育材料中。除了您提出的解决方案之外,匿名内部类和Java 8 lambdas /方法引用是另外两个主要候选者。在这四个中,我的猜测是匿名内部类是最常见的,而lambdas可能具有当前最大的增长(因为它们对Android来说相对较新)。
我认为在单独的类中实现接口可能更好,而不是活动/片段,只是一个类
当然欢迎你这样做。它并不总是有效,因为可能有你想要的东西private
但仍然让听众看到它们,现在已经不再可能了。
此外,我们的听众往往是短暂的,任何"举重"委托给别的东西。为大型项目提供专用的顶级Java类(及相关文件)会在较大的项目中非常繁琐。
这是关于android生态系统/生命周期的吗?
不是真的。这四种方法在那里大致相当。
从教育的角度来看,目标是尽可能少地使用代码,同时仍然使用广泛理解的技术。因此,例如,当我开始撰写关于Android的内容并进行教学时,我最初关注了Google的示例并使用了匿名内部类。我从读者和学生那里得到了一些回应,因为他们在2008年至2010年期间并没有很好地理解匿名的内部课程。所以,我转而使用"实现组件上的接口"你不喜欢的方法,因为它是最普遍理解的最短解决方案。从那时起,我重新引入了匿名内部类,没有问题,我正在慢慢引入lambdas /方法引用。