2011-11-06 8 views
10

Próbuję uruchomić kod here. Kompiluje się dobrze. Będzie działać. I załaduje kartę 1 (z 3). Jednak po kliknięciu na zakładkę 2. lub 3., otrzymuję to:FragmentTransaction .attach i .detach dla zakładek Actionbar

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

to się dzieje w kodzie tutaj

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 
    } 
} 

stwierdziliśmy, że detach jest dostępna tylko do API Level 13. Próbowałam remove, ale oczywiście nie robi tego samego. Czy ktoś ma jakieś pomysły na temat tego, jak przezwyciężyć to na podstawie kodu w pierwszym link?


EDIT: Chyba to samo dotyczy attach jak również w kodzie, ale nie oberwać przed awarii aplikacji.

Odpowiedz

13

Wygląda na to, że zastąpienie kilku miejsc w kodzie, które odwołują się do dołączania i odłączania przy dodawaniu i usuwaniu, umożliwia normalne funkcjonowanie kodu w środowisku z poziomu 13 interfejsu API.

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

ale z ft.add/usuń stan fragment jest utracone podczas przełączania między kartami – Arvis

2

jeśli używasz FragmentTransaction API 4+ compatablity pakietu -android.support.v4.app.FragmentTransaction - powinieneś być w stanie wywołać dołączyć i odłączyć metod na wstępnym poziomie API 13 platform.

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

+0

Podobne blogu: [ Fragmenty dla wszystkich] (http://android-developers.blogspot.com/2011/03/fragments-for-all.html) – blahdiblah

Powiązane problemy