一个活动和多个片段

时间:2015-07-29 06:35:14

标签: android android-fragments android-activity

这不是一个真正的问题,但我只是想知道我是否采用了良好的方法? 我正在开发一个应用程序,在那个应用程序中我正在使用片段。只有一个活动和多个片段。问题是,我的活动不是FragmentActivity,因为我对该活动有一些观察“控制”。在活动布局的中间,我正在替换片段。模拟UI如下所示。

Mock up UI

所以我使用的方法是在主活动loadFragment(String fragment)中有一个公共方法,我从任何片段调用此方法来加载特定片段。我得到了我的活动实例并像这样调用这个方法。

MainActivity.getInstance().laodFragment(framgnet);

实例基本上就是这个。

private MainActivity instance;

并且

public static MainActivity getInstance(){
     return instance;
}

这是我的loadFragment()方法。

public void loadFragment(String fragment) {

        CURRENT_FRAGMENT = fragment;

        switch (fragment) {
            case FRAGMENT_WORK:
                generalFragment = new WorkFragment();
                break;
            case FRAGMENT_WORK_TWO:
                generalFragment = new WorkTwoFragment();
                break;
            case FRAGMENT_REGISTRATION:
                generalFragment = new RegistrationFragment();
                break;
            case FRAGMENT_INTERNAL:
                generalFragment = new InternalFragment();
                break;
            case FRAGMENT_ABSENCE:
                generalFragment = new AbsenceFragment();
                break;
            case FRAGMENT_OVERTIME:
                generalFragment = new OvertimeFragment();
                break;
            case FRAGMENT_HOME:
                clearAllFragments();
                generalFragment = new HomeFragment();
        }
        replaceFragment(generalFragment);
    }

我只想知道我是否采用了良好的方法?如果不是我怎么能改善它? 我已经读过静态变量中的保存上下文不是一个好方法。 谢谢。

2 个答案:

答案 0 :(得分:0)

  

我已经读过静态变量中的保存上下文不是a   好方法

正确! 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.SessionAuthentication', 'oauth2_provider.ext.rest_framework.OAuth2Authentication', ), 主要适用于缓存。

您可以执行另一种方法,使其紧密耦合,如下所示。

1:static建立起来InterfaceActivity

Fragment

2:将该界面实施为interface BridgeInteface { public void loadFragment(String fragment); } MainActivity方法Override

3:将Interface实例作为参数传递到loadFragment(String fragment)

Fragment

4:当您需要替换 @Override public void loadFragment(String fragment) { CURRENT_FRAGMENT = fragment; switch (fragment) { case FRAGMENT_WORK: generalFragment = new WorkFragment(bridgeInteface); break; case FRAGMENT_WORK_TWO: generalFragment = new WorkTwoFragment(bridgeInteface); break; case FRAGMENT_REGISTRATION: generalFragment = new RegistrationFragment(bridgeInteface); break; case FRAGMENT_INTERNAL: generalFragment = new InternalFragment(bridgeInteface); break; case FRAGMENT_ABSENCE: generalFragment = new AbsenceFragment(bridgeInteface); break; case FRAGMENT_OVERTIME: generalFragment = new OvertimeFragment(bridgeInteface); break; case FRAGMENT_HOME: clearAllFragments(); generalFragment = new HomeFragment(bridgeInteface); } replaceFragment(generalFragment); }

时,从您的loadFragment(String fragment)拨打方法Fragment

答案 1 :(得分:0)

好的,我找到了解决问题的方法。我从FragmentsActivity中删除了所有静态实例,并将所有方法调用替换为事件调用。我为此目的使用了Otto库。它非常有用且易于使用。