Java 类生命周期与ActionBar Sherlock选项卡片段
我正在开发我的第一个Android应用程序之一,并且一直在理解控制器/类的生命周期是如何安排的。我有iOS的背景 基本上我所做的就是遵循这一点 根据我的理解,我将一个TabListener绑定到片段上。切换选项卡时,将调用TabListener的Java 类生命周期与ActionBar Sherlock选项卡片段,java,android,actionbarsherlock,Java,Android,Actionbarsherlock,我正在开发我的第一个Android应用程序之一,并且一直在理解控制器/类的生命周期是如何安排的。我有iOS的背景 基本上我所做的就是遵循这一点 根据我的理解,我将一个TabListener绑定到片段上。切换选项卡时,将调用TabListener的onTabSelected(),并且每次创建FragmentA/FragmentB的新实例时都会调用该选项卡 这导致了这样一个事实:每次切换选项卡时,都会再次调用所有onCreate..()方法 我不想每次切换选项卡时都创建一个新的片段实例,而是使用在应
onTabSelected()
,并且每次创建FragmentA/FragmentB的新实例时都会调用该选项卡
这导致了这样一个事实:每次切换选项卡时,都会再次调用所有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
}
私有片段;
私有最终字符串mTag;
私人期末班;
公共TabListener(字符串pTag,类pClass){
mTag=pTag;
mClass=pClass;
}
@凌驾
已选择的公共事务(选项卡,碎片事务ft){
if(mFragment==null){
试一试{
MFFragment=(Fragment)mClass.newInstance();
}捕获(实例化异常e){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}
ft.add(R.id.fragment_容器、mFragment、mTag);
}否则{
ft.attach(mFragment);
}
}
@凌驾
已选择公共空页(选项卡,碎片事务ft){
if(mFragment!=null){
ft.分离(mFragment);
}
}
已重新选择公共无效页签(页签,碎片事务){
//没什么
}
然后您可以实例化您的侦听器,如中所示
TabListener l = new TabListener<MyFragment>(tabTag, MyFragment.class)
TabListener l=新的TabListener(tabTag,MyFragment.class)