Полезные шаблоны дизайна для работы с FragmentManager на Android


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();
}

Я обычно использую один метод для каждого экрана приложения. Я делаю что-то подобное, когда работаю с небольшими локальными базами данных (обычно SQLite), поэтому я применил это к фрагментам, которые, похоже, имеют схожий рабочий процесс; Я не женат на этом, хотя.

Как вы организовали свои приложения для взаимодействия с API фрагментов, и какие (если таковые имеются) шаблоны проектирования, по вашему мнению, применимы для этого?


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...
}

Затем, когда вы создаете фрагмент и добавляете его в backstack, вместо того, чтобы говорить:

Фрагмент MyFragment = новый фрагмент MyFragment ();

Вы можете использовать фабричный метод вместо ключевого слова «new».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.