我看过很多文章如何实现底部导航视图,但是这些解决方案都不像是使用“底部导航活动”创建的新项目中的解决方案:
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”,但片段本身没有变化。
答案 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);
在我的示例中,这就是所需要的。 谢谢。