在Android上使用FragmentManager的有用设计模式


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
为什么您要由一个班级负责显示所有片段?它不是Fragment类里面的静态方法吗?
Piotr 2014年

Answers:


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

然后,当您创建一个片段并将其添加到后台时,而不是说:

MyFragment片段= new MyFragment();

您可以使用工厂方法代替“ new”关键字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.