从ViewPager删除片段页面

时间:2019-07-22 20:10:00

标签: android visual-studio android-viewpager fragmentpageradapter

我正在尝试从ViewPager动态添加和删除片段,添加没有任何问题,但是删除根本不起作用。

我在做什么错?请帮忙。 我尝试了许多解决方案。

其中一种情况导致添加片段。第二种情况是删除碎片。

MainActivity 类:

public class MainActivity : AppCompatActivity
{
    private DrawerLayout mDrawerLayout;
    private SupportFragment mCurrentFragment = new SupportFragment();
    private Stack<SupportFragment> mStackFragment;
    private TabAdapter adapter;
    private TabLayout tabs;


    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        mStackFragment = new Stack<SupportFragment>();
        SetContentView(Resource.Layout.Main);

        SupportToolbar toolBar = FindViewById<SupportToolbar>(Resource.Id.toolBar);
        SetSupportActionBar(toolBar);
        SupportActionBar ab = SupportActionBar;
        ab.SetHomeAsUpIndicator(Resource.Drawable.ic_menu);
        ab.SetDisplayHomeAsUpEnabled(true);

        mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);

        NavigationView navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
        if (navigationView != null)
        {
            SetUpDrawerContent(navigationView);
        }

        tabs = FindViewById<TabLayout>(Resource.Id.tabs);

        ViewPager viewPager = FindViewById<ViewPager>(Resource.Id.viewpager);

        SetUpViewPager(viewPager);

        tabs.SetupWithViewPager(viewPager);

        FloatingActionButton fab = FindViewById<FloatingActionButton>(Resource.Id.fab);

        fab.Click += (o, e) =>
        {
            View anchor = o as View;

            Snackbar.Make(anchor, "Yay Snackbar!!", Snackbar.LengthLong)
                    .SetAction("Action", v =>
                    {
                        Intent intent = new Intent(fab.Context, typeof(BottomSheetActivity));
                        StartActivity(intent);
                    })
                    .Show();
        };
    }


    private void SetUpViewPager(ViewPager viewPager)
    {
        adapter = new TabAdapter(SupportFragmentManager);
        adapter.AddFragment(new Fragment1(), "Fragment 1", 1);
        adapter.AddFragment(new Fragment2(), "Fragment 2", 2);
        adapter.AddFragment(new Fragment3(), "Fragment 3", 3);
        adapter.AddFragment(new Fragment4(), "Fragment 4", 4);

        viewPager.Adapter = adapter;
    }

    private void RemoveTest(ViewPager viewPager)
    {
        adapter.RemoveFragment(new Fragment2(),"Fragment 2", 2);            
        adapter.NotifyDataSetChanged();            
    }

    private void AddTest(ViewPager viewPager)
    {
        adapter.AddFragment(new Fragment4(), "Fragment test5", 5);
        adapter.NotifyDataSetChanged();

    }

    public override bool OnOptionsItemSelected(IMenuItem item) 
    {

        switch (item.ItemId)
        {
            case Android.Resource.Id.Home:
                mDrawerLayout.OpenDrawer((int)GravityFlags.Left);

                return true;

            default:
                return base.OnOptionsItemSelected(item);                    
        }
    }

    private void SetUpDrawerContent(NavigationView navigationView)
    {

        navigationView.NavigationItemSelected += (object sender, NavigationView.NavigationItemSelectedEventArgs e) =>
        {
            e.MenuItem.SetChecked(true);

            mDrawerLayout.CloseDrawers();

            tabs = FindViewById<TabLayout>(Resource.Id.tabs);
            ViewPager viewPager = FindViewById<ViewPager>(Resource.Id.viewpager);
            adapter = new TabAdapter(SupportFragmentManager);

            switch (e.MenuItem.ItemId)
            {
                case (Resource.Id.nav_home):                        
                    Toast.MakeText(this, "Domyślne", ToastLength.Short).Show();
                    mDrawerLayout.CloseDrawers();
                    break;
                case (Resource.Id.nav_messages):
                    Toast.MakeText(this, "profile", ToastLength.Short).Show();
                    mDrawerLayout.CloseDrawers();
                    break;
                case (Resource.Id.nav_friendes):
                    AddTest(viewPager);
                    break;
                case (Resource.Id.nav_discussion):
                    RemoveTest(viewPager);
                    break;
            }

        };

    }

TabAdapter 类:

    public class TabAdapter : FragmentPagerAdapter
    {
        public List<SupportFragment> Fragments { get; set; }
        public List<string> FragmentNames { get; set; }
        public List<int> FragmentPos { get; set; }

        public TabAdapter (SupportFragmentManager sfm) : base (sfm)
        {
            Fragments = new List<SupportFragment>();
            FragmentNames = new List<string>();
            FragmentPos = new List<int>();                
        }

        public void RemoveFragment(SupportFragment fragment, string name, int pos)
        {
            Fragments.Remove(fragment);
            FragmentNames.Remove(name);
            FragmentPos.Remove(pos);
        }

        public void AddFragment(SupportFragment fragment, string name, int pos)
        {
            Fragments.Add(fragment);
            FragmentNames.Add(name);
            FragmentPos.Add(pos);

        }
        public override void SetPrimaryItem(View container, int position, Java.Lang.Object @object)
        {
            base.SetPrimaryItem(container, position, @object);
        }


        public void GetFragment(SupportFragment fragment, string name)
        {
            Fragments.Add(fragment);
            FragmentNames.Add(name);
        }

        public override int Count
        {
            get
            {
                return Fragments.Count;
            }
        }

        public override SupportFragment GetItem(int position)
        {
            return Fragments[position];

        }

        public override ICharSequence GetPageTitleFormatted(int position)
        {
            return new Java.Lang.String(FragmentNames[position]);
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您可以尝试

DatetimeIndex
相关问题