AndroidでFragmentManagerを使用するための便利なデザインパターン


10

フラグメントを操作するときは、フラグメントのアクションを定義する静的メソッドで構成されるクラスを使用しています。どのようなプロジェクトでもFragmentActions、次のようなメソッドを含むというクラスがあるかもしれません。

public static void showDeviceFragment(FragmentManager man){
    String tag = AllDevicesFragment.getFragmentTag();

    AllDevicesFragment fragment = (AllDevicesFragment)man.findFragmentByTag(tag);

    if(fragment == null){
        fragment = new AllDevicesFragment();
    }

    FragmentTransaction t = man.beginTransaction();
    t.add(R.id.main_frame, fragment, tag);

    t.commit();
}

通常、アプリケーション画面ごとに1つのメソッドがあります。小さなローカルデータベース(通常はSQLite)で作業するときは、このようなことを行うので、それをフラグメントに適用しました。フラグメントには同様のワークフローがあるようです。私はそれと結婚していません。

Fragments APIとインターフェースするようにアプリケーションをどのように編成しましたか。また、どのようなデザインパターン(ある場合)を適用すると思いますか?


1
なぜすべての種類のフラグメントの表示を担当する1つのクラスがあるのですか?Fragmentクラスの内部の静的メソッドではないですか?
ピオトル

回答:


3

受け入れられるパターンは、カスタムフラグメントクラス(通常はnewInstance()と呼ばれますが、ディーラーの選択)内にファクトリメソッドを含めることです。したがって、フラグメントクラスは次のようになります。

public class MyFragment extends Fragment
{
    public static MyFragment newInstance()
    {
        MyFragment newFragment = new MyFragment();
        // add any bundle arguments here if needed
        return newFragment;
    }
    // rest of fragment class...
}

次に、フラグメントを作成してバックスタックに追加すると、次のように言うのではありません。

MyFragment fragment = new MyFragment();

'new'キーワードの代わりにファクトリメソッドを使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.