在实现“片段到活动”通信时,通常讲的示例是:
MyActivity extends Activity implements MyInterface {
...
@Override
public void myMethod() {
// Do something....
}
...
}
MyFragment extends Fragment {
...
private void aMethod() {
((MyInterface) getActivity()).myMethod();
}
...
}
事实是,在我的项目中,很多时候片段仅以“分而治之”的方式用于分解不同模块中的现有活动(可能是在重构过程中,当活动变得过于复杂时).将这些片段中的一个附加到另一个活动(不同于从中提取片段的活动)将毫无意义.
因此,在我的情况下,我通常以:
MyActivity extends Activity {
...
void myMethod() {
// Do something....
}
...
}
MyFragment extends Fragment {
...
private void aMethod() {
((MyActivity) getActivity()).myMethod();
}
...
}
因此,可怕的问题是:如果仅在该活动中始终使用Fragment,为什么还要使用接口?这是不好的做法吗?在这些情况下使用接口有什么优势?
解决方法:
我认为这不是一个坏习惯.使用界面时您要解决什么问题?您尝试预见将片段与其他活动一起使用的情况.如果这没有发生,那么您的界面只会增加复杂性,而不会带来任何好处.
另一个好处可能是定义了片段可以在活动上调用的方法,因此您的接口定义明确.但是,这样做的好处值得商bat.
此外,我通常将活动和片段按功能分组在一个包中.因此,如果我正在编写此代码,则将myMethod包设为私有,这显然无法通过接口完成.因此,它甚至可以改善封装性.