Java 在Android中,紧密耦合的片段可以正常使用吗(在某些情况下)?
在实现片段到活动的通信时,通常给出的示例是:Java 在Android中,紧密耦合的片段可以正常使用吗(在某些情况下)?,java,android,android-fragments,android-activity,interaction,Java,Android,Android Fragments,Android Activity,Interaction,在实现片段到活动的通信时,通常给出的示例是: MyActivity extends Activity implements MyInterface { ... @Override public void myMethod() { // Do something.... } ... } MyFragment extends Fragment { ... private void aMethod() { ((MyInterface) getActivity(
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();
}
...
}
所以一个可怕的问题是:如果片段总是只在活动中使用,为什么我们必须使用接口?这是坏习惯吗?在这些情况下使用接口的优点是什么
如果片段总是只在活动内部使用,为什么我们必须使用接口
在这种情况下,您不必使用接口
这是坏习惯吗
在这种情况下,对你来说,不。我不认为这是一种不好的做法。当您使用接口时,您试图解决什么问题?您试图预见将片段用于其他活动的情况。如果这种情况没有发生,那么您的界面只会增加复杂性,而没有任何好处 另一个好处可能是定义片段可以调用活动的方法,因此您的接口定义良好。然而,这样做的好处是有争议的
此外,我通常将活动和片段按函数分组到一个包中。因此,如果我写这篇文章,我将拥有
myMethod
package private,这显然不能用接口来完成。因此,在某种程度上,它甚至改进了封装。myMethod()
实际上在我的代码中是包私有的,我忘了在问题中正确地报告它。我会编辑它。@MarcoRomano我仍然会在答案中留下这些信息,我认为强调它很重要。我认为人们有时过度设计了一些东西,虽然我同意脱钩通常是一种好的做法,但在简单的情况下不这样做并不一定是错误的。最简单有效的解决方案有时也是最好的。