پاس دادن دیتا در Bottom Navigation

پرسیده شده
فعالیت 1270 روز پیش
دیده شده 599 بار
0

سلام

من با استفاده از NavController به Bottom navigation فرگمنت هارو وصل کردم به این شکل

NavController navController = Navigation.findNavController(this,  R.id.fragment_nav_host);
NavigationUI.setupWithNavController(bottom_navigation_view, navController);

حالا میخوام وقتی روی یه دکمه Bottom navigation کلیک شد دیتا پاس بدم به اون فرگمنت

میشه راهنمایی کنید، دیگه اینجا فرگمنت ها با graph به یکدیگر وصل نیستن که بشه با safeArgument فرستاد

فایل پیوست

0
حذف شده

سلام و احترام

 

روش اول : استفاده از 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

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

12 آبان 99

حذف شده
الان داخل کدی که شما قرار دادین argument رو در addOnDestinationChangedListener ارسال میکنیم داخل فرگمنت دیتایی که ارسال کردیم رو با getArguments.getString() دریافت میکنم ولی null ارور میده
حذف شده
کاش از اون قسمت از ارورتون که null میده رو ارسال میکردید اما بهر حال من روشی دیگر در پست بعدی برای شما قرار میدهم.
پوریا شفیعی

12 آبان 99

1
حذف شده

سلام و احترام

 

در ادامه جواب کامنت به علت کد بودن جواب :

navController.getGraph().findNode(R.id.???) .addArgument("???", new NavArgument.Builder() .setDefaultValue(???) .build());

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

12 آبان 99