Могу ли я завершить действие и начать новое из случая переключения фрагментов? - PullRequest
0 голосов
/ 29 мая 2020

Я работаю в студии android, у меня есть фрагмент нижней навигации. В последнем случае переключения мне нужна кнопка для перехода к HomeActivity (домашний экран). Я пробовал:

...

  case SUMMARY:
             navNextText.setText(R.string.end);
             navNextImageView.setOnClickListener(v -> navigateHome());
             navNextText.setOnClickListener(v -> navigateHome());
             break;

        default:
            Log.w(TAG, "Executing a default case in navigateNext(). CTX: " + contextState.toString());
    }

 private void navigateHome() {
    Objects.requireNonNull(getActivity()).finish();
    Intent in = new Intent(getActivity(), HomeActivity.class);
    startActivity(in);
}

Это работает до некоторой степени. Я могу перейти домой, но когда я возвращаюсь в действие, в котором находится фрагмент навигации, панель навигации возвращается к тому месту, где она была до изменения активности. Я также пробовал добавлять onStop() и onDestroy к private void navigateHome, но это, похоже, ничего не дало. Мне просто интересно, что является более чистым способом закрыть действие из фрагмента и начать новое.

1 Ответ

0 голосов
/ 29 мая 2020

просто добавьте finish(), если вы хотите удалить текущую активность из backstack. Поскольку вы находитесь во фрагменте, используйте requireActivity().finish()

Также, чтобы убедиться, что у вас нет действий в back stack, вы можно удалить все, используя нижеуказанный флаг намерения

 private void navigateHome() {
    Objects.requireNonNull(getActivity()).finish();
    Intent in = new Intent(getActivity(), HomeActivity.class);
    in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // <<<<< flag
    startActivity(in);
    requireActivity().finish(); // <<< finish the current activity
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...