OnBackPressed фрагмент переходит к другому фрагменту при закрытии приложения - PullRequest
0 голосов
/ 17 апреля 2020

Я открываю фрагмент через другой фрагмент. Из фрагмента календаря я открываю фрагмент поиска, мне бы хотелось, чтобы, когда человек находился во фрагменте поиска и давил назад, он переводил их во фрагмент календаря, а не закрывал приложение.

В моей MainActivity. java Я реализовал метод onBackPressed

@Override
public void onBackPressed() {
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

Так я открываю фрагменты в MainActivity. java

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.nav_calendar:
           getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CalendarFragment()).commit();
            break;
        case R.id.nav_survey:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SurveyFragment()).commit();
            break;
        case R.id.nav_forum:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ForumFragment()).commit();
            break;
        case R.id.nav_logout:
            logout();
            break;
        case R.id.nav_contact:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ContactFragment()).commit();
            break;
    }

    drawer.closeDrawer(GravityCompat.START);
    return true;
}

Вот так я открываю поисковый фрагмент из фрагмента календаря

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            getFragmentManager().beginTransaction().replace(R.id.fragment_container, new SearchFragment()).commit();
            return false;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

Есть ли способ изменить поведение только для этого фрагмента и сохранить нормальное поведение для остальных?

1 Ответ

1 голос
/ 17 апреля 2020

Когда вы пишете код во фрагменте календаря, чтобы открыть фрагмент поиска, добавьте строку ниже в операцию FragmentTransaction, как ...

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            getFragmentManager().beginTransaction().add(R.id.fragment_container, new SearchFragment()).addToBackStack(null).commit();
            return false;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}
...