Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中,紧密耦合的片段可以正常使用吗(在某些情况下)?_Java_Android_Android Fragments_Android Activity_Interaction - Fatal编程技术网

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我仍然会在答案中留下这些信息,我认为强调它很重要。我认为人们有时过度设计了一些东西,虽然我同意脱钩通常是一种好的做法,但在简单的情况下不这样做并不一定是错误的。最简单有效的解决方案有时也是最好的。