2011-08-12 19 views
26

estoy empezando una actividad a través de los medios habituales:Fragmentos del paquete onCreateView(). ¿De dónde viene?

Intent startIntent = new Intent(this, DualPaneActivity.class); 
startIntent.putExtras(((SearchPageFragment) currentFragment).getPageState()); 
startActivity(startIntent); 

Cuando las cargas de esta actividad, se coloca un fragmento en un marco de este modo:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
Fragment currentFragment = fragment; 
currentFragment.setArguments(getIntent().getExtras()); 
transaction.replace(R.id.singlePane, currentFragment); 
transaction.commit(); 

Parece simple, ¿verdad?

Sin embargo, puede interior de onCreateView() el acceso método de tres haces separados (cuatro, si se incluye la incluida en el fragmento onCreate(Bundle savedInstanceState)):

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    // Fill state information 
    Bundle bundle; 
    if(savedInstanceState != null) bundle = savedInstanceState; // 1  
    else if(getArguments() != null) bundle = getArguments();  // 2 
    else       bundle = getActivity().getIntent().getExtras(); // 3 
    setPageState(bundle); 
} 

En el ejemplo anterior, he trabajado a cabo de prueba y error que el paquete que quiero es el segundo, el que se recuperó del .

Según tengo entendido, el tercero de getActivity().getIntent().getExtras(); llama al paquete desde el intento utilizado para comenzar a contener actividad. También sé por experimentación que savedInstanceState parece ser siempre nulo. ¿Pero de dónde viene y por qué es nulo?

El documentation dice esto:

savedInstanceState Si no nulo, este fragmento está siendo reconstruido desde un estado guardado anterior, como se da aquí.

Eso no me ayuda - Me molesta más que dejar de seguir adelante. ¿Alguien puede ayudarme con esta molestia?

Respuesta

12

Según mi leal saber y entender, onCreateView y onCreate() han pasado el paquete desde onSaveInstanceState().

Así que si invalida onSaveInstanceState() y coloca los datos en el paquete, debería poder recuperarlos en onCreateView(). Es por eso que la documentación dice que el paquete no será nulo cuando el fragmento se reconstruya a partir de un estado guardado anterior.

Cuestiones relacionadas