0

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

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

因此,据我了解,我将 TabListener 绑定到片段。当切换选项卡时,TabListeneronTabSelected()被调用,并且每次创建 FragmentA/Fragment B 的新实例。

这导致每次我切换选项卡时都会onCreate..()再次调用所有方法。

我不想每次切换选项卡时都创建一个新的片段实例,而是使用在应用程序启动时最初创建的片段实例。

问题是如何在不杀死其中的片段的情况下切换选项卡?

4

1 回答 1

0

您可以通过附加/分离片段来实现此目的,每次未选择选项卡时在选项卡侦听器上分离当前片段并在 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)
于 2013-05-14T17:40:34.410 回答