opa, ressuscitando esse tópico aqui hehe, seguinte estou criando meu app aki, e tenho 4 fragments em meu aplicativo de receitas:
1 - Lista de Receitas Fragment, que exibe a lista com todas receitas
2 - Ingredientes Fragment - que exibe os ingredientes da receita selecionada;
3 - Passos Fragment - que exibe os passos a passo da receita selecionada;
4 - VideoFragment - que vai exibir meus vídeos.Meu problema está sendo na alteração do modo Portrait para Landscape, se estou no modo portrait e meu fragment Ingredientes esta sendo exibido, por exemplo, ao rotacionar a tela, gostaria que o fragment continuasse sendo exibido.
Minha activity no modo landscape possui dois fragments(Master detail) onde o primeiro frame layout eh substituido pela lista de receitas, e o segundo entraria os "detalhes", como por exemplo a lista de ingredientes selecionados
Quando o usuario clica no botao para ver as receitas, eu passo como parametro em um bundle todos os ingredientes, e no onSaveInstance da activity eu salvo o fragment para recuperar no metodo onCreate().
Até ae tudo bem, mas quando entro para recuperar ela, me aparece essa bendita mensagem:
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.agilles.receitas/br.com.agilles.receitas.ui.activity.ReceitasActivity}: java.lang.IllegalStateException: Can't change container ID of fragment IngredientesFragment{7e63862 #1 id=0x7f070050}: was 2131165264 now 32156489
Estou fazendo da seguinte maneira no meu onSaveInstanceState:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
switch (fragmentoExibido) {
case RECEITA_INGREDIENTES:
getSupportFragmentManager().putFragment(outState, INGREDIENTE_TAG, ingredientesFragment);
outState.putInt("fragmentoExibido", fragmentoExibido);
break;
case RECEITA_PASSOS:
getSupportFragmentManager().putFragment(outState, PASSOS_TAG, passosFragment);
outState.putInt("fragmentoExibido", fragmentoExibido);
break;
}
}
e para recuperar e exibir o fragment na minha tela master / detail:
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction tx = supportFragmentManager.beginTransaction();
tx.replace(R.id.frame_principal, listaReceitasFragment);
if (savedInstanceState != null) {
if (ingredientesFragment != null) {
ingredientesFragment = new IngredientesFragment();
}
tx.replace(R.id.frame_principal, listaReceitasFragment);
fragmentoExibido = savedInstanceState.getInt("fragmentoExibido");
ingredientesFragment = (IngredientesFragment) getSupportFragmentManager().getFragment(savedInstanceState, INGREDIENTE_TAG);
passosFragment = (PassosFragment) getSupportFragmentManager().getFragment(savedInstanceState, PASSOS_TAG);
if (estaNoModoPaisagem()) {
switch (fragmentoExibido) {
case RECEITA_INGREDIENTES:
tx.replace(R.id.frame_secundario, ingredientesFragment);
break;
case RECEITA_PASSOS:
tx.replace(R.id.frame_secundario, passosFragment);
break;
default:
tx.replace(R.id.frame_secundario, new IngredientesFragment());
}
}
Alguma luz?