2011-12-16 14 views
35

Configuré la vista de contenido en FragmentActivity, y la actividad creará la instancia de fragmento para mí de acuerdo con el nombre de clase especificado en el archivo de diseño. Pero, ¿cómo puedo obtener esa instancia de fragmento?¿Cómo obtener la instancia de fragmento de FragmentActivity?

public class MyActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle extra) { 
     super.onCreate(extra); 
     setContentView(R.layout.page_fragment); 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pageview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="org.xi.android.PageFragment" /> 

Respuesta

86

Puedes utilizar findFragmentById en FragmentManager.

dado que está utilizando la biblioteca de soporte (está extendiendo FragmentActivity) que puede utilizar:

getSupportFragmentManager().findFragmentById(R.id.pageview) 

Si no está utilizando la biblioteca de soporte (por lo que está en el panal + y no desea utilizar la biblioteca de soporte):

getFragmentManager().findFragmentById(R.id.pageview) 

Tenga en cuenta que el uso de la biblioteca de soporte se recomienda incluso en Honeycomb +.

+0

Por favor, vea mi pregunta relacionada: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

+0

esto no funcionará si tiene varias instancias del fragmento de marco en la copia posterior. – datayeah

33

Para obtener la instancia fragmento en una clase que se extiende FragmentActivity:

MyclassFragment instanceFragment= 
    (MyclassFragment)getSupportFragmentManager().findFragmentById(R.id.idFragment); 

Para obtener la instancia fragmento en una clase que se extiende Fragmento:

MyclassFragment instanceFragment = 
    (MyclassFragment)getFragmentManager().findFragmentById(R.id.idFragment); 
+3

es la respuesta correcta. La otra respuesta (validada) no funciona en el caso de fragmentos que utilizan la biblioteca de soporte v4, tal como se utiliza en la pregunta (FragmentActivity solo está presente en la biblioteca de soporte) –

Cuestiones relacionadas