在Android中(在某些情况下)可以将紧密耦合的片段放好吗?

时间:2016-11-22 12:56:12

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

在实现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();
  }
  ...
}

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

  

如果片段总是只在该活动中使用,为什么我们必须使用接口?

在这种情况下,您不必使用界面。

  

这是不好的做法吗?

对于你这种情况,没有。