MVVMCross-Android динамический фрагмент внутри фрагмента и управление стеком навигации по фрагменту - PullRequest
0 голосов
/ 28 февраля 2019

В настоящее время я работаю над проектом MVVMCross Xamarin для Android.До сих пор я добился нормальной навигации и навигации по нижней панели.Я хочу, чтобы открыть динамические фрагменты внутри каждой вкладки нижней панели.Например, у меня есть меню нижних баров Недавние, Любимые и Рядом.При нажатии на каждую вкладку он создает фрагменты.Внутри каждого фрагмента я хочу предоставить возможность динамически создавать фрагменты по клику.

Я хочу достичь здесь, он должен держать стек навигации по вкладкам.Допустим, я создал 5,3,4 фрагмента соответственно для «Недавних», «Избранное» и «Рядом», и в настоящее время я нахожусь на вкладке «Избранное» и, нажав «Назад», сначала необходимо вернуться ко всем 3 вкладкам.Точно так же следует следовать навигации для других вкладок.

Точно такие же функции и возможности доступны в этой ссылке на github [https://github.com/ncapdevi/FragNav][1]. Это одна для Android, но мне нужен совет, как мне добиться такой же функциональности с Xamarin, MVVMCross и C #.

Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 01 марта 2019

Сначала ваша ссылка мертва, а затем я думаю, что вам нужно понять задний стек фрагментов и показать скрытые возможности, чтобы реализовать это. FragmentTransaction

общий ход мыслей, у вас естьRecentFragment, FavoriteFragment и NearByFragment три корневых фрагмента. Когда вы щелкаете по соответствующей вкладке, вы можете использовать show и hide метод фрагмента, подобный этому:

 FragmentTransaction fTransaction = FragmentManager.BeginTransaction();
            hideAllFragment(fTransaction);
            //judge which tab is clicked
            switch (tab.Id)
            {
                case Recent:                
                    if (recentFragment== null)
                    {
                        recentFragment= new RecentFragment ();
                        fTransaction.Add(Resource.Id.ly_content, recentFragment);
                    }
                    else{fTransaction.Show(recentFragment);}break;
                case Favorite:
                    if (favoriteFragment== null)
                    {
                        favoriteFragment= new FavoriteFragment();
                        fTransaction.Add(Resource.Id.ly_content, favoriteFragment);
                    }
                    else{fTransaction.Show(favoriteFragment);}
                    break;
                case NearBy:
                    if (nearByFragment== null)
                    {
                        nearByFragment= new NearByFragment();
                        fTransaction.Add(Resource.Id.ly_content, nearByFragment);
                    }else{fTransaction.Show(nearByFragment);}break;
            }
            fTransaction.Commit();

, а затем в каждом корневом фрагменте для реализации заднего стека используйте addToBackStack :

FragmentManager fragmentManager = FragmentManager;
        FragmentTransaction fragmentTransaction = fragmentManager.BeginTransaction();
        fragmentTransaction.Replace(containerViewId,fragment);
        fragmentTransaction.AddToBackStack(null);
        fragmentTransaction.Commit();

и наконец вы можете попытаться инкапсулировать контроллер

...