تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ امین رحیم زاده
پاس دادن دیتا در Bottom Navigation
جامعه جاوا (اندروید) ایجاد شده در ۱۲ آبان ۱۳۹۹

سلام

من با استفاده از 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());

 

پوریا شفیعی ۱۲ آبان ۱۳۹۹، ۱۲:۱۷