web-dev-qa-db-ja.com

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

フラグメントを操作するとき、フラグメントのアクションを定義する静的メソッドで構成されるクラスを使用しています。どのプロジェクトでも、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とインターフェースするようにアプリケーションをどのように編成しましたか。また、どのようなデザインパターン(ある場合)を適用すると思いますか?

10
Anthony Naddeo

受け入れられるパターンは、カスタムフラグメントクラス内にファクトリメソッドを含めることです(通常は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'キーワードの代わりにファクトリメソッドを使用できます。

3
Leeran7742