2013-04-25 27 views
0

我正在研究我的第一個Android應用程序,並且理解了控制器/類的生命週期是如何安排的。我來自iOS背景。使用ActionBar的類生命週期Sherlock Tab碎片

Basicly我所做的就是這樣從我的理解我綁定一個TabListener的片段以下這simple tutorial

。切換選項卡時,TabListener的onTabSelected()被調用,並且每次創建一個新的FragmentA/Fragment B實例。

這導致我每次切換標籤都會再次調用方法。

我不想每次切換選項卡時創建新的片段實例,而是使用在應用程序啓動時創建的實例。

問題是如何切換標籤而不殺死那裏的碎片?

回答

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) 
+0

謝謝你 - 那個安裝/拆卸的東西做的伎倆我! – MrBr 2013-05-16 14:27:30