รูปแบบการออกแบบที่มีประโยชน์สำหรับการทำงานกับ 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) ดังนั้นฉันจึงนำไปใช้กับแฟรกเมนต์ซึ่งดูเหมือนจะมีเวิร์กโฟลว์ที่คล้ายกัน ฉันไม่ได้แต่งงานกับมัน

คุณจัดระเบียบแอปพลิเคชันของคุณให้เชื่อมต่อกับ Fragments API ได้อย่างไรและคุณคิดว่ารูปแบบการออกแบบ (ถ้ามี) มีอะไรบ้าง


1
ทำไมคุณมีชั้นเรียนหนึ่งรับผิดชอบในการแสดงชิ้นส่วนทุกชนิด? มันไม่ควรเป็นวิธีการคงที่ในชั้นชิ้นส่วนภายในหรือไม่
Piotr

คำตอบ:


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 Fragment = new MyFragment ();

คุณสามารถใช้วิธีการจากโรงงานแทนคำหลัก 'ใหม่'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.