“默认”底部导航视图如何更改片段?

时间:2019-07-09 06:53:35

标签: java android navigationcontroller

我看过很多文章如何实现底部导航视图,但是这些解决方案都不像是使用“底部导航活动”创建的新项目中的解决方案:

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 个答案:

答案 0 :(得分:1)

实际上,约翰·乔的评论对我有很大帮助。如果我使用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);

在我的示例中,这就是所需要的。 谢谢。