Como posso impedir que meu fragmento seja destruído?
Eu tenho uma visualização de navegação com alguns itens, e quando um item é pressionado, ele vai para esse fragmento. Por exemplo, se você pressionar o item "Início", na gaveta, ele abrirá o fragmento inicial.
navigationView = (NavigationView)findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.home_id:
HomeFragment homeFragment = (HomeFragment) fragmentManager.findFragmentByTag("Home");
if (homeFragment == null)
homeFragment = new HomeFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.Main, homeFragment, "Home");
fragmentTransaction.commit();
getSupportActionBar().setTitle("Home");
item.setChecked(true);
drawerLayout.closeDrawers();
break;
case R.id.chat_id:
ChatFragment chatFragment = (ChatFragment) fragmentManager.findFragmentByTag("Chat");
if (chatFragment == null)
chatFragment = new ChatFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.Main, chatFragment, "Chat");
fragmentTransaction.commit();
getSupportActionBar().setTitle("Chat");
item.setChecked(true);
drawerLayout.closeDrawers();
break;
}
}
}
Então, o que eu acho que está acontecendo é que, quando estou usando oreplace()
método, ele está destruindo o fragmento de bate-papo. E se eu tiver dados no fragmento de bate-papo e quiser garantir que os dados não desapareçam ao alterar fragmentos.
NoChatFragment
classe eu coloquei este método de substituição:
@Override
public void onSaveInstanceState(Bundle outState)
{
Log.d("CHATFRAG", "onSaveInstanceState: been called ");
super.onSaveInstanceState(outState);
outState.putString("textView",textView.getText().toString());
//Save the fragment's state here
}
Agora, quando alterno entre fragmentos no meu aplicativo, esse método não é chamado, o que significa que o fragmento está sendo destruído.
Existe uma maneira alternativa de trocar o fragmento atual que está na tela pelo fragmento desejado (sem destruir os dois)? Vou ter mais fragmentos (até dez), existe uma solução otimizada que não exigirá código duplicado?