繁体   English   中英

ActionBar Sherlock Tab片段的类生命周期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM