类生命周期与ActionBar夏洛克标签片段



我正在开发我的第一个Android应用程序之一,并且对控制器/类的生命周期如何安排的理解陷入了困境。我来自iOS背景。

我所做的就是遵循这个简单的教程

所以从我的理解,我绑定一个TabListener到片段。当切换选项卡时,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)

最新更新