Przydatne wzorce projektowe do pracy z FragmentManager na Androidzie


10

Podczas pracy z fragmentami korzystałem z klasy złożonej ze statycznych metod, które definiują działania na fragmentach. Dla każdego projektu mogę mieć klasę o nazwie FragmentActions, która zawiera metody podobne do następujących:

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

Zazwyczaj mam jedną metodę na ekran aplikacji. Robię coś takiego podczas pracy z małymi lokalnymi bazami danych (zwykle SQLite), więc zastosowałem to do fragmentów, które wydają się mieć podobny przepływ pracy; Ale nie jestem z tego żonaty.

W jaki sposób zorganizowałeś swoje aplikacje, aby współpracowały z interfejsem API Fragments i jakie (jeśli w ogóle) wzorce projektowe uważasz, że możesz to zrobić?


1
Dlaczego masz jedną klasę odpowiedzialną za wyświetlanie wszelkiego rodzaju fragmentów? Czy nie powinna to być metoda statyczna wewnątrz klasy Fragment wewnątrz?
Piotr

Odpowiedzi:


3

Akceptowanym wzorcem jest posiadanie metody fabrycznej w niestandardowej klasie fragmentów (zwykle nazywanej newInstance (), ale hej, wybór dealera). Twoja klasa fragmentów powinna wyglądać mniej więcej tak:

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

Następnie, gdy utworzysz fragment i dodasz go do backstacka, zamiast mówić:

MyFragment fragment = new MyFragment ();

Możesz użyć metody fabrycznej zamiast słowa kluczowego „new”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.