0

How to reuse the fragments inside view pager ??? I have view pager and inside that Having 3 fragments. I'm creating new instance of fragment to all time. So It's take more space in memory. In this 3 fragments having perform same functionality. While Im creating new instance every time. It's having more problems like. 1) It take times to keyboard open and close. 2) Scrollview take times to scroll. 3) Edit text take time to focus on and off.

https://prnt.sc/or86ec

Here screen that I have implemented viewpager with 3 fragment. In swipe it's look like same.

I have created Pager adapter:

public class ProposalDetailPagerAdapter : FragmentStatePagerAdapter, CardAdapter
{
    private static int NUM_ITEMS = 3;
    private float mBaseElevation;

    public ProposalDetailPagerAdapter(Android.Support.V4.App.FragmentManager fm, float baseElevation) : base(fm)
    {
        mBaseElevation = baseElevation;
    }

    public override int Count => NUM_ITEMS;

    public override int GetItemPosition(Java.Lang.Object @object)
    {

        if (@object is ProposalDetailFragment)
        {
           ProposalDetailFragment fragment = (ProposalDetailFragment)@object;
           if (fragment != null)
           {
               fragment.UpdateFragmentAfterCreate();
           }
        }

        return base.GetItemPosition(@object);
    }

    public int getCount()
    {
        return NUM_ITEMS;
    }

    public override Android.Support.V4.App.Fragment GetItem(int position)
    {
       switch (position)
        {
           case 0:
               return OpenFragment(0);
           case 1:
               return OpenFragment(1);
           case 2:
               return OpenFragment(2);
          default:
               return null;
      }
    }


    private Android.Support.V4.App.Fragment OpenFragment(int position)
    {

           ProposalDetailFragment createdFragment = new ProposalDetailFragment();

        Bundle bundle = new Bundle();
        bundle.PutInt("position", position);
        createdFragment.Arguments = bundle;
        return createdFragment;
    }


    public override Android.Support.V4.App.Fragment GetItem(int position)
    {

        switch (position)
        {
            case 0:
                return OpenFragment(0);
            case 1:
                return OpenFragment(1);
            case 2:
                return OpenFragment(2);
            default:
                return null;
        }

    }

}

In this adapter, created 3 fragments. But It's having lot's of memory problem. Because lot's of condition having in fragments. and created 3 instance of memory. So How to resolve this issue ???

Vanjara Sweta
  • 81
  • 1
  • 10

1 Answers1

0

Here is a solution :

In ProposalDetailPagerAdapter , can override DestroyItem method.And comment out the method of calling the parent class to avoid repeated creation of the fragment.

As follow:

public class ProposalDetailPagerAdapter : FragmentStatePagerAdapter, CardAdapter
{
    ...

    public override void DestroyItem(ViewGroup container, int position, Java.Lang.Object @object)
    {
        //base.DestroyItem(container, position, @object);
        // Comment out the calling parent class
    }
    ...
}
Junior Jiang
  • 12,430
  • 1
  • 10
  • 30