Pola desain yang berguna untuk bekerja dengan FragmentManager di Android


10

Ketika bekerja dengan fragmen, saya telah menggunakan kelas yang terdiri dari metode statis yang mendefinisikan tindakan pada fragmen. Untuk setiap proyek yang diberikan, saya mungkin memiliki kelas yang dipanggil FragmentActions, yang berisi metode yang mirip dengan yang berikut:

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

Saya biasanya akan memiliki satu metode per layar aplikasi. Saya melakukan sesuatu seperti ini ketika saya bekerja dengan database lokal kecil (biasanya SQLite) jadi saya menerapkannya pada fragmen, yang tampaknya memiliki alur kerja yang serupa; Saya belum menikah dengan itu.

Bagaimana Anda mengatur aplikasi Anda untuk berinteraksi dengan API Fragmen, dan pola desain apa (jika ada) yang menurut Anda berlaku melakukan ini?


1
Mengapa Anda memiliki satu kelas yang bertanggung jawab untuk menunjukkan semua jenis fragmen? Bukankah itu seharusnya metode statis di dalam kelas Fragmen di dalam?
Piotr

Jawaban:


3

Pola yang diterima adalah memiliki metode pabrik di dalam kelas fragmen khusus Anda (biasanya disebut newInstance () tapi hei pilihan dealer). Jadi kelas fragmen Anda akan terlihat seperti ini:

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

Kemudian, ketika Anda membuat fragmen dan menambahkannya ke backstack, alih-alih mengatakan:

Fragmen MyFragment = MyFragment baru ();

Anda dapat menggunakan metode pabrik alih-alih kata kunci 'baru'.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.