Как «по умолчанию» нижняя навигационная панель изменяет фрагменты? - PullRequest
0 голосов
/ 09 июля 2019

Я видел много статей о том, как реализовать навигацию снизу, но ни одно из этих решений не выглядело так, как в новом проекте, созданном с помощью Навигации снизу:

BottomNavigationView navView = findViewById(R.id.nav_view);
AppBarConfiguration.Builder(
    R.id.navigation_timer, R.id.navigation_presets)
    .build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);

Нет транзакций, нет FragmentManager и т. Д.

Причина, по которой я спрашиваю, заключается в том, что я пытаюсь реализовать кнопку на Fragment2 (PresetsFragment), которая после щелчка устанавливает значения и переключает представление на Fragment1 (TimerFragment). Это реализация интерфейса в MainActivity:

@Override
public void updateCountdowns(final int round_time, final int break_time)
{
    TimerFragment timer = (TimerFragment)getSupportFragmentManager().findFragmentById(R.id.navigation_timer);
    if (timer != null) {
        timer.updateCountdowns(round_time, break_time);
    } else
    {
        TimerFragment new_timer = new TimerFragment();
        Bundle args = new Bundle();
        args.putInt("round_time_bundle", round_time);
        args.putInt("break_time_bundle", break_time);
        new_timer.setArguments(args);
        FragmentManager fm = getSupportFragmentManager();
        fm.beginTransaction()
                .replace(R.id.navigation_presets, new_timer, "new_timer")
                .addToBackStack(null)
                .commit();
    }
}

После добавления логов я вижу, что интерфейс работает и создается новый TimerFragment, но сам фрагмент не меняется.

1 Ответ

1 голос
/ 09 июля 2019

На самом деле комментарии Джона Джо мне очень помогли.Нет смысла использовать интерфейс между фрагментами, если я использую Navigation.

Bundle args = new Bundle();
args.putInt("round_time_bundle", round_time);
args.putInt("break_time_bundle", break_time);
Navigation.findNavController(view).navigate(R.id.navigation_timer, args);

В моем примере это все, что нужно.Спасибо.

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