Перемещение вкладок с использованием фрагментов - вложенных вкладок - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в android, особенно в Xamarin Android C#. У меня есть нижние навигационные вкладки и фрагменты. Это: фрагмент_фотография (tab_picture), фрагмент дома (вкладка_home), фрагменты уведомлений (вкладка_ уведомлений), фрагмент_профиль (tab_profile). Внутри фрагмент_картины (tab_picture) у меня есть 2 вкладки. Они являются фрагментом камеры (tab_camera) и фрагментом галереи (tab_gallery). Я хочу переместить вкладки frag_picture, например, когда я щелкаю tab_camera, он показывает XML tab_camera, а когда я щелкаю tab_gallery, он показывает XML tab_gallery.

Я не использую viewpager. Я просто использую фрагменты. Вкладка не изменит положение на XML. Я много искал в Google Но я все еще растерялся. Пожалуйста, помогите мне

 using System;
    using Android.OS;
    using Android.Support.Design.Widget;
    using Android.Views;
    using Android.Support.V4.App;
    using Android.Widget;

namespace MyPhotographicMemory.Droid.Fragments
{
    public class Fragment_Picture : Fragment
    {
        TabLayout tabLayout;
        private TabLayout.Tab tabGallery, tabCamera;
        Fragment fragment = null;


        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

        }

        public static Fragment_Picture NewInstance()
        {
            var frag2 = new Fragment_Picture { Arguments = new Bundle() };
            return frag2;
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var ignored = base.OnCreateView(inflater, container, savedInstanceState);
            var v = inflater.Inflate(Resource.Layout.FragmentPicture, null);

            tabLayout = v.FindViewById<TabLayout>(Resource.Id.pictureTabLayout);

            tabLayout.TabSelected += (object sender, TabLayout.TabSelectedEventArgs e) =>
            {
                switch (e.Tab.Position)
                {
                    case Resource.Layout.FragmentCamera: //Resource.Id.tabItem1
                        fragment = new Fragment_Camera();
                        TabLayout.Tab tab = tabLayout.GetTabAt(0);
                        tab.Select();
                        break;
                    case Resource.Layout.FragmentGallery: //Resource.Id.tabItem1
                        fragment = new Fragment_Gallery();
                        TabLayout.Tab tab1 = tabLayout.GetTabAt(1);
                        tab1.Select();
                        break;

                }

            };
            return v;
        }
}
}

1 Ответ

0 голосов
/ 28 апреля 2020

Хотите ли вы добиться результата, подобного этому GIF?

enter image description here

Если это так, вы должны получить вложенные вкладки с фрагментом.

Вот мой код в моем первом фрагменте.

   public class Fragment1 : Fragment
    {
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your fragment here
        }

        public static Fragment1 NewInstance()
        {
            var frag1 = new Fragment1 { Arguments = new Bundle() };
            return frag1;
        }


        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var ignored = base.OnCreateView(inflater, container, savedInstanceState);
            var view = inflater.Inflate(Resource.Layout.fragment1, null);
            BottomNavigationView bottomNavigationView= view.FindViewById<BottomNavigationView>(Resource.Id.mynested_bottom_navi);
            bottomNavigationView.NavigationItemSelected += BottomNavigationView_NavigationItemSelected;
            LoadFragment(Resource.Id.tab_camera);
            return view;
        }

        private void BottomNavigationView_NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
        {
            LoadFragment(e.Item.ItemId);

        }
        //switch fragment by tab id.
        void LoadFragment(int id)
        {
           Fragment fragment = null;
            switch (id)
            {
                case Resource.Id.tab_gallery:
                    fragment = Fragment_Gallery.NewInstance();
                    break;
                case Resource.Id.tab_camera:
                    fragment = Fragment_Camera.NewInstance();
                    break;

            }
            if (fragment == null)
                return;

            FragmentManager.BeginTransaction()
               .Replace(Resource.Id.mynest_content_frame, fragment)
               .Commit();
        }
    }

Вот мое демо, вы можете обратиться к нему. https://drive.google.com/file/d/1XZE6YopdsvDHY8-DwXBxRpHz3oFlJbOR/view

...