在实现Fragment to Activity通信时,通常被告知的例子是:
MyActivity extends Activity implements MyInterface {
...
@Override
public void myMethod() {
// Do something....
}
...
}
MyFragment extends Fragment {
...
private void aMethod() {
((MyInterface) getActivity()).myMethod();
}
...
}
事实是,在我的项目中,碎片通常仅用于分解" divide et impera"中的不同模块中的现有活动。时尚(可能在重构时活动变得过于复杂)。将其中一个片段附加到另一个活动(与提取片段的活动不同)将毫无意义。
所以在我的情况下,我通常最终得到:
MyActivity extends Activity {
...
void myMethod() {
// Do something....
}
...
}
MyFragment extends Fragment {
...
private void aMethod() {
((MyActivity) getActivity()).myMethod();
}
...
}
所以可怕的问题是:如果片段总是只在该活动中使用,为什么我们必须使用接口?这是不好的做法吗?在这些情况下使用接口有什么好处?
答案 0 :(得分:2)
我不认为这是一种不好的做法。使用界面时,您试图解决什么问题?您试图预见将片段与其他活动一起使用的情况。如果没有发生这种情况,那么您的界面只会增加复杂性而没有任何好处。
另一个好处是可能定义片段可以在活动上调用哪些方法,因此您的接口定义良好。然而,这样做的好处值得商榷。
此外,我通常将功能和片段按功能分组在一个包中。所以,如果我写这篇文章,我会myMethod
包私有,显然不能用接口完成。所以在某种程度上它甚至可以改善封装。
答案 1 :(得分:1)
如果片段总是只在该活动中使用,为什么我们必须使用接口?
在这种情况下,您不必使用界面。
这是不好的做法吗?
对于你这种情况,没有。