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?

questionAnswers(3)

yourAnswerToTheQuestion