2011-11-06 74 views
10

我試圖讓代碼here工作。它編譯好。它會運行。它會加載標籤1(3)。然而,當我點擊第二或第三選項卡上,我得到這個:FragmentTransaction .attach和.detach的Actionbar選項卡

java.lang.NoSuchMethodError: android.app.FragmentTransaction.detach

這種情況發生在這裏的代碼

public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    if (mFragment != null) { 
     //ft.detach(mFragment); //requires API Level 13 
     ft.remove(mFragment); //this does not do the same thing as detach 
    } 
} 

我發現detach僅適用於API級別13.我試着remove,但它顯然不會做同樣的事情。有沒有人有任何想法如何克服這個基於第一個link代碼?


編輯: 我想這同樣適用於attach因爲這也是在代碼中,但應用程序崩潰之前不會被打到。

回答

13

看來,替換代碼中引用附加和分離添加和刪除的幾個位置將允許代碼在預API級別13環境中正常運行。

public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
     mArgs = args; 

     // Check to see if we already have a fragment for this tab, probably 
     // from a previously saved state. If so, deactivate it, because our 
     // initial state is that a tab isn't shown. 
     mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag); 
     if (mFragment != null) { // && !mFragment.isDetached()) { 
      FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction(); 
      //ft.detach(mFragment); 
      ft.remove(mFragment); 
      ft.commit(); 
     } 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     //if (mFragment == null) { 
      mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); 
      ft.add(android.R.id.content, mFragment, mTag); 
     //} else { 
     // ft.attach(mFragment); 
     //} 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     if (mFragment != null) { 
      //ft.detach(mFragment); //requires API 13 
      ft.remove(mFragment); //this does not do the same thing as detach 
     } 
    } 
+4

但ft.add /刪除選項卡 – Arvis

2

,如果您使用的是API 4+ compatablity包-android.support.v4.app.FragmentTransaction的FragmentTransaction - 你應該能夠調用安裝和拆卸預API級別13平臺的方法。

http://developer.android.com/resources/samples/Support4Demos/index.html

+0

相關博客文章之間切換時丟失片段的狀態:所有碎片](http://android-developers.blogspot.com/2011/03/fragments-for-all.html) – blahdiblah

相關問題