سلام
من با استفاده از NavController به Bottom navigation فرگمنت هارو وصل کردم به این شکل
NavController navController = Navigation.findNavController(this, R.id.fragment_nav_host);
NavigationUI.setupWithNavController(bottom_navigation_view, navController);
حالا میخوام وقتی روی یه دکمه Bottom navigation کلیک شد دیتا پاس بدم به اون فرگمنت
میشه راهنمایی کنید، دیگه اینجا فرگمنت ها با graph به یکدیگر وصل نیستن که بشه با safeArgument فرستاد
سلام و احترام
روش اول : استفاده از SharedViewModel هست که استاد هم توضیحات رو ارایه دادن
روش دوم استفاده از NavArgument:
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
navController = Navigation.findNavController(getActivity(), R.id.navBottomNavigation);
NavigationUI.setupWithNavController(R.id.bottomNavigationView, navController);
NavGraph navGraph = navController.getNavInflater().inflate(R.navigation.nav_sub_graph);
NavArgument argument = new NavArgument.Builder().setDefaultValue(yourObject).build();
navGraph.addArgument("yourObject",argument);
navController.setGraph(navGraph);
}
و سپس :
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
switch (destination.getId()) {
case R.id.profileFragment:
NavArgument argumentProfile = new NavArgument.Builder().setDefaultValue(preferences).build();
destination.addArgument("preferences",argumentProfile);
case R.id.homeFragment:
NavArgument argumentHome = new NavArgument.Builder().setDefaultValue(preferences).build();
destination.addArgument("preferences",argumentHome);
case R.id.orderFragment:
NavArgument argumentOrder = new NavArgument.Builder().setDefaultValue(preferences).build();
destination.addArgument("preferences",argumentOrder);
}
}
});
سمپل کد زیر کاملا شما رو به صورت مرحله به مرحله راهنمایی میکنه : Go To sample
آموزش زیر وصل کردن navController به Bottom Navigation هست (که شما انجام دادید ):
Android Navigation Tutorial for Fragments using Bottom Navigation
۱-همچنین در استک اورفلو : StackOverFlow
۲-همچنین در استک اور فلو : StackOverFlow
سلام و احترام
در ادامه جواب کامنت به علت کد بودن جواب :
navController.getGraph().findNode(R.id.???) .addArgument("???", new NavArgument.Builder() .setDefaultValue(???) .build());