[英]class life cycle with ActionBar Sherlock Tab fragments
我正在开发我的第一个Android应用程序之一,并且对控制器/类生命周期的安排方式有所了解。 我来自iOS背景。
基本上我所做的就是遵循这个简单的教程
因此,据我了解,我将TabListener绑定到Fragment。 切换选项卡时,将调用TabListener的onTabSelected()
,并且每次创建FragmentA / Fragment B的新实例时。
这导致每次我切换选项卡时都会再次调用所有onCreate..()
方法的事实。
我不想每次切换标签时都创建一个新的片段实例,而是使用在应用程序启动时最初创建的片段实例。
问题是如何切换标签而不杀死其中的片段?
您可以通过以下方式实现此目的:仅附加/分离片段,每次未选择选项卡时都在选项卡侦听器上分离当前片段,并在onTabSelected方法上检查是否之前已创建了片段。
private Fragment mFragment;
private final String mTag;
private final Class<T> mClass;
public TabListener(String pTag, Class<T> pClass) {
mTag = pTag;
mClass = pClass;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if ( mFragment == null ) {
try {
mFragment = (Fragment)mClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
ft.add(R.id.fragment_container,mFragment,mTag);
} else {
ft.attach(mFragment);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if ( mFragment != null ) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
//Nothing
}
然后,您可以像在实例化您的侦听器
TabListener l = new TabListener<MyFragment>(tabTag, MyFragment.class)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.