更改片段 - 如果可能的话,改进它

时间:2018-05-26 17:43:35

标签: java android

我正在进行片段添加/更改,因为我是初学者,我会告诉你,我是怎么做的。

如果有人能用更少的代码做得更好,请告诉我。

所以我有ActivityUtils:

public abstract class ActivityUtils extends AppCompatActivity{

    public static void addFragment(FragmentManager manager, Fragment fragment, int frameId){
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(frameId, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

    public static void changeFragment(FragmentManager manager, Fragment fragment, int frameId){
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(frameId, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

}

在MainActivity中我有两种方法:

public void addFragment(Fragment fragment){
    ActivityUtils.addFragment(getSupportFragmentManager(), fragment, R.id.fragmentContainer);
}

public void changeFragment(Fragment fragment){
    ActivityUtils.changeFragment(getSupportFragmentManager(), fragment, R.id.fragmentContainer);
}

现在我们可以调用这样的方法:

示例:

changeFragment(DatabaseFragment.getInstance());

但是我们还需要像这样的每个阵营中的方法:

我们的例子

 public static Fragment getInstance(){
        return new DatabaseFragment();
    }

出了什么问题?或者专业程序员做得更好?

2 个答案:

答案 0 :(得分:0)

到目前为止,您的代码看起来很好。您唯一可以改进的是避免重复代码。看看这个:

public abstract class ActivityUtils extends AppCompatActivity{

    public static void addFragment(FragmentManager manager, Fragment fragment, int frameId){
        performTask(manager, fragment, frameId, 1);
    }

    public static void changeFragment(FragmentManager manager, Fragment fragment, int frameId){
        performTask(manager, fragment, frameId, 2);
    }

    private static void performTask(FragmentManager manager, Fragment fragment, int frameId, int taskType) {
        FragmentTransaction transaction = manager.beginTransaction();

        switch(taskType){
            case 1:
                transaction.add(frameId, fragment);
                break;
            case 2:
                transaction.replace(frameId, fragment);
                break;
        }

        transaction.addToBackStack(null);
        transaction.commit();
    }

}

目前你可能还有更多的代码行,但如果你决定添加所有具有相同模式的方法,除了执行该操作的这一行,那么上面的方法就更好了。

答案 1 :(得分:0)


在MainActivity中尝试以下方法以轻松替换片段。

 public void replaceHomeFragment(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.container_fragment, fragment);
    fragmentTransaction.commit();
}

如果要在后台堆栈中添加替换的片段,只需在fragmentManager.beginTransaction之后添加此行。
fragmentTransaction.addToBackStack(NULL);

我们使用不同的方法来替换片段并维护后台,同时我们单击后退按钮或直接将用户导航到主Homefragment。所以,如果你还需要更多东西,你可以联系我。