3

通常は一例に語った活動通信にフラグメントを実装している:厳密に結合されたフラグメントは、特定の状況下ではAndroidでも問題ありませんか?

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

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

事実は少なからず私のプロジェクトでは断片は、「分割らimperaに異なるモジュール内の既存の活動を分解するだけで使用されていることです"ファッション(おそらく、アクティビティが複雑すぎるときのリファクタリング中)。これらの断片の1つを別の活動(断片が抽出されたものとは異なる)に付けることは、単に意味をなさない。

だから私の例では、私は通常で終わる:

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

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

のでれる恐れられた質問:なぜ、我々はフラグメントは、常にその活動の内部でのみ使用する場合はインターフェイスを使用する必要がありますか?これは悪い習慣ですか?これらのケースでインターフェイスを使用する利点は何ですか?

答えて

1

フラグメントが常にそのアクティビティ内でのみ使用される場合は、インターフェイスを使用する必要があるのはなぜですか?

この場合、インターフェイスを使用する必要はありません。

これは悪い習慣ですか?

この場合、いいえ。

2

私はそれは悪い習慣だとは思わない。インターフェイスを使用するときに何を解決しようとしていますか?他のいくつかのアクティビティでフラグメントを使用する場合は、そのケースを予見しようとします。これが起こっていない場合は、インターフェイスは複雑さを増やすだけで利益をもたらしません。

おそらく、フラグメントがアクティビティでどのメソッドを呼び出すことができるかを定義しているため、インタフェースは明確に定義されています。しかし、その利点は議論の余地があります。

さらに、私は通常、アクティビティとフラグメントを1つのパッケージにまとめてグループ化します。だから、私がこれを書いていたのであれば、私はmyMethodパッケージをプライベートにするでしょう。これは明らかにインターフェースではできません。つまり、ある意味ではカプセル化が改善されます。

+0

'myMethod()'は実際に私のコードではプライベートなパッケージでしたが、質問で正しく報告するのを忘れました。私はそれを編集します。 –

+0

@MarcoRomano私はまだ答えにこの情報を残すでしょう、私はそれを強調することが重要だと思います。人々は時には物事を大きくすると思います。デカップリングは一般的には良い方法であると私は同意しますが、単純なケースではそれを行わないのは必ずしも間違いではありません。最も簡単な解決法は時には最適です。 – Malcolm

関連する問題