这不是一个真正的问题,但我只是想知道我是否采用了良好的方法?
我正在开发一个应用程序,在那个应用程序中我正在使用片段。只有一个活动和多个片段。问题是,我的活动不是FragmentActivity
,因为我对该活动有一些观察“控制”。在活动布局的中间,我正在替换片段。模拟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);
}
我只想知道我是否采用了良好的方法?如果不是我怎么能改善它? 我已经读过静态变量中的保存上下文不是一个好方法。 谢谢。
答案 0 :(得分:0)
我已经读过静态变量中的保存上下文不是a 好方法
正确! 'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
),
主要适用于缓存。
您可以执行另一种方法,使其紧密耦合,如下所示。
1:让static
建立起来Interface
和Activity
。
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)
好的,我找到了解决问题的方法。我从Fragments
和Activity
中删除了所有静态实例,并将所有方法调用替换为事件调用。我为此目的使用了Otto库。它非常有用且易于使用。