android - studio - Fragmentos del paquete onCreateView(). ¿De dónde viene?
llamar un fragment desde un activity (1)
Estoy iniciando una actividad por los medios habituales:
Intent startIntent = new Intent(this, DualPaneActivity.class);
startIntent.putExtras(((SearchPageFragment) currentFragment).getPageState());
startActivity(startIntent);
Cuando esta actividad se carga, coloca un Fragmento en un marco como tal:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFragment = fragment;
currentFragment.setArguments(getIntent().getExtras());
transaction.replace(R.id.singlePane, currentFragment);
transaction.commit();
Parece simple, ¿verdad?
Sin embargo, dentro del método onCreateView () puede acceder a tres paquetes separados (cuatro, si incluye el incluido 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 la instancia anterior, getArguments()
por prueba y error que el paquete que quiero es el segundo, el que se recupera de getArguments()
.
Desde mi entender el tercero de getActivity().getIntent().getExtras();
en realidad está llamando al Bundle desde la intención utilizada para comenzar a contener la actividad. También sé por experimentación que savedInstanceState
parece ser siempre nulo. Pero ¿de dónde viene y por qué es nulo?
La documentation dice esto:
savedInstanceState Si no es nulo, este fragmento se está reconstruyendo a partir de un estado guardado anterior como se indica aquí.
Eso no me ayuda, me está molestando más que impedir que siga adelante. ¿Puede alguien ayudarme con esta molestia?
Según mi conocimiento, onCreateView
y onCreate()
reciben el paquete de onSaveInstanceState()
.
Por lo tanto, si reemplaza 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.