Основное занятие

ел бы сделать нижнюю панель навигации в моем проекте. У каждого представления есть свой фрагмент. Проблема в том, что каждый раз, когда я нажимаю на кнопку, чтобы изменить представление, например, с последних на избранные, создается новый фрагмент с совершенно новыми состояниями (например, позиция прокрутки, текст изменяется независимо от того, что содержит мой фрагмент). Я знаю, что в официальной документации Android было написано, что нижняя панель навигации должна сбрасывать состояния задач, но я думаю, что это слишком неудобно для пользователей. Мне бы хотелось иметь подобную функциональность, например, instagram, которую вы меняете с подачи на исследование и обратно на подачу позиции прокрутки, когда изображение кэшируется, все остается сохраненным. Я пытался почти всеми способами решить эту проблему, единственное, что сработало, - это установить видимость GONE и установить видимость VISIBLE в соответствии с ситуацией, но я понимаю, что это НЕ ПРАВИЛЬНО, должен быть лучший способ сделать это, и я не говорю об этом вручную сохранение необходимых экземпляров. Я следовал почти каждому уроку о нижних навигационных фрагментах, но интересно то, что никто не заинтересован в том, чтобы использовать его, не вызывая new каждый раз.

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frameLayout, FirstFragment.newInstance());
fragmentTransaction.commit();

bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment = null;
        switch (item.getItemId()) {
            case R.id.menu_dialer:
                fragment = FirstFragment.newInstance();
                break;
            case R.id.menu_email:
                fragment = SecondFragment.newInstance();
                break;
            case R.id.menu_map:
                fragment = ThirdFragment.newInstance();
                break;
        }
        if (fragment != null) {
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frameLayout, fragment);
            fragmentTransaction.commit();
        }
        return true;
    }
});

Я также попробовал решения onAttach и Deattach, но снова безуспешно.

ВИДЕОСИГНАЛ: новый, я попробовал версию Nino Handler, он работает, только когда я нажимаю на ту же кнопку фрагмента

Может быть, это связано с тем, что я использую канареечную версию или что-то не так в моих зависимостях gradle?

НОВЫЕ ОБНОВЛЕНИЯ:

public class MainActivity extends AppCompatActivity {

    private TextView mTextMessage;


    private static final String TAG_FRAGMENT_ONE = "fragment_one";
    private static final String TAG_FRAGMENT_TWO = "fragment_two";

    private FragmentManager fragmentManager;
    private Fragment currentFragment;

    String TAG = "babken";
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        Fragment fragment = null;
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                   fragment = fragmentManager.findFragmentByTag(TAG_FRAGMENT_ONE);
                    if (fragment == null) {
                        fragment = FragmentFirst.newInstance();
                    }
                    replaceFragment(fragment, TAG_FRAGMENT_ONE);

                    break;
                case R.id.navigation_dashboard:

                     fragment = fragmentManager.findFragmentByTag(TAG_FRAGMENT_TWO);
                    if (fragment == null) {
                        fragment = FragmentSecond.newInstance();
                    }
                    replaceFragment(fragment, TAG_FRAGMENT_TWO);

                    break;
            }
            return true;

        }
    };

    private void replaceFragment(@NonNull Fragment fragment, @NonNull String tag) {
        if (!fragment.equals(currentFragment)) {
            fragmentManager
                    .beginTransaction()
                    .replace(R.id.armen, fragment, tag)
                    .commit();
            currentFragment = fragment;
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragmentManager = getSupportFragmentManager();
        Fragment fragment = fragmentManager.findFragmentByTag(TAG_FRAGMENT_ONE);
        if (fragment == null) {
            fragment = FragmentFirst.newInstance();
        }
        replaceFragment(fragment, TAG_FRAGMENT_ONE);
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }

}

Ответы на вопрос(1)

Ваш ответ на вопрос