【问题标题】:Can tightly coupled fragments be okay in Android (under certain circumstances)?紧耦合的片段在 Android 中可以吗(在某些情况下)?
【发布时间】:2016-11-22 12:56:11
【问题描述】:

在实现 Fragment 到 Activity 通信时,通常所说的示例是:

MyActivity extends Activity implements MyInterface {
  ...
  @Override
  public void myMethod() {
  // Do something....
  }
  ...
}

MyFragment extends Fragment {
  ...
  private void aMethod() {
    ((MyInterface) getActivity()).myMethod();
  }
  ...
}

事实是,在我的项目中,Fragment 通常仅用于以“分而治之”的方式分解不同模块中的现有活动(也许在重构期间活动变得过于复杂)。将这些片段中的一个附加到另一个活动(与从中提取片段的活动不同)根本没有任何意义。

所以在我的情况下,我通常会得到:

MyActivity extends Activity {
  ...
  void myMethod() {
  // Do something....
  }
  ...
}

MyFragment extends Fragment {
  ...
  private void aMethod() {
    ((MyActivity) getActivity()).myMethod();
  }
  ...
}

所以可怕的问题是:如果 Fragment 始终只在该活动中使用,为什么我们必须使用接口?这是不好的做法吗?在这些情况下使用接口有什么好处?

【问题讨论】:

    标签: java android android-fragments android-activity interaction


    【解决方案1】:

    我不认为这是一个坏习惯。当您使用界面时,您想解决什么问题?您尝试预见将片段与其他活动一起使用的情况。如果这没有发生,那么您的界面只会增加复杂性而没有任何好处。

    另一个好处可能是定义片段可以在活动上调用哪些方法,因此您的界面定义良好。然而,这样做的好处是值得商榷的。

    此外,我通常将活动和片段按功能分组在一个包中。所以如果我写这个,我会有myMethod 包私有,这显然不能用接口来完成。所以在某种程度上它甚至改进了封装性。

    【讨论】:

    • myMethod() 实际上是我的代码中的私有包,我忘记在问题中正确报告它。我会编辑它。
    • @MarcoRomano 我仍然会在答案中保留此信息,我认为强调它很重要。我认为人们有时会过度设计事物,虽然我同意解耦通常是一种很好的做法,但在简单的情况下不这样做不一定是错误的。最简单有效的解决方案有时也是最好的。
    【解决方案2】:

    如果 Fragment 始终只在该 Activity 中使用,为什么我们必须使用接口?

    在这种情况下,您不必使用接口。

    这是不好的做法吗?

    在这种情况下,不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多