2011-11-06 11 views
10

Estoy tratando de obtener el código here para que funcione. Compila bien. Correrá Y cargará la pestaña 1 (de 3). Sin embargo, al hacer clic en la pestaña 2ª o 3ª, me sale esto:FragmentTransaction .attach and .detach para pestañas de la barra de acciones

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

esto sucede en el código aquí

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

encontré que detach sólo está disponible a nivel de API 13. Traté remove, pero no hace lo mismo, obviamente. ¿Alguien tiene alguna idea sobre cómo superar esto basado en el código en el primer link?


EDIT: supongo que lo mismo vale para attach ya que es también en el código, pero no recibe un golpe antes de la aplicación se bloquea.

Respuesta

13

Parece que la sustitución de varios lugares en el código que referencia adjuntar y separar con agregar y eliminar permitirá que el código funcione normalmente en un entorno previo a la API Nivel 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

pero con ft.add/eliminar el estado fragmento se pierde al cambiar entre pestañas – Arvis

2

si está utilizando el API en FragmentTransaction 4+ compatablity paquete -android.support.v4.app.FragmentTransaction - usted debe ser capaz de llamar a atar y separar los métodos de API de nivel pre 13 plataformas.

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

+0

entrada de blog relacionada: [ Fragmentos para todos] (http://android-developers.blogspot.com/2011/03/fragments-for-all.html) – blahdiblah

Cuestiones relacionadas