当实现 Fragment 到 Activity 的通信时,通常的例子是:
MyActivity extends Activity implements MyInterface {
...
@Override
public void myMethod() {
// Do something....
}
...
}
MyFragment extends Fragment {
...
private void aMethod() {
((MyInterface) getActivity()).myMethod();
}
...
}
事实是,在我的项目中,Fragments 通常仅用于以“divide et impera”的方式分解不同模块中的现有 Activity (可能在 Activity 变得过于复杂时进行重构)。将这些 fragment 之一附加到另一个 Activity (不同于从中提取 fragment 的 Activity )根本没有任何意义。
所以在我的案例中,我通常会得到:
MyActivity extends Activity {
...
void myMethod() {
// Do something....
}
...
}
MyFragment extends Fragment {
...
private void aMethod() {
((MyActivity) getActivity()).myMethod();
}
...
}
所以可怕的问题是:如果 Fragment 总是只在该 Activity 中使用,为什么我们必须使用接口(interface)?这是不好的做法吗?在这些情况下使用接口(interface)有哪些优势?
我认为这不是一个坏习惯。当您使用界面时,您试图解决什么问题?您尝试预见将 fragment 用于其他 Activity 的情况。如果这没有发生,那么您的界面只会增加复杂性而没有任何好处。
另一个好处可能是定义 fragment 可以调用 Activity 的哪些方法,因此您的界面定义明确。然而,这样做的好处值得商榷。
此外,我通常将 Activity 和 fragment 按功能分组在一个包中。因此,如果我正在编写此代码,我会将 myMethod
包私有(private)化,这显然不能通过接口(interface)来完成。因此,在某种程度上,它甚至可以改进封装。
我是一名优秀的程序员,十分优秀!