0

I am trying to built a view pager ,so when i scroll the next fragments refreshes to accommodate for changes that might have happened to database in previous fragment . my Fragment adapter is :

public class inneradapter extends FragmentStatePagerAdapter {
    List<android.support.v4.app.Fragment> fl=new 
    Map<Integer,String> m;
    FragmentManager frag_m;
   Context mContext;

    public inneradapter(FragmentManager fm,Context c)
    {
        super(fm);

        frag_m=fm;
        m=new HashMap<Integer, String>();


        mContext=c;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        Object obj = super.instantiateItem(container, position);
        if (obj instanceof Fragment) {

            // record the fragment tag here.
            Fragment f = (Fragment) obj;
            Log.e("instance","got fragment"+f);
            String tag = f.getTag();
            Log.e("instance","tag"+tag);

            m.put(position, tag);
        }
        return obj;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title="";
        switch(position)
        {
            case 0: {title="All Medicine";break;}
            case 1: {title="Today";break;}
            case 2: {title="Log";break;}
        }
        return title;
    }

    @Override
    public Fragment getItem(int i) {

        //if(i!=0) fl.get(i).onPause();
        switch (i)
        {
            case 0:{ return new All_fragment();}
            case 1:{ return new today_fragment();}
            case 2:{ return new Log_fragment();}
        }

        return null;
    }

    public Fragment getFragment(int position) {
        String tag = m.get(position);
        Toast.makeText(MainActivity.this,"tag:"+tag,Toast.LENGTH_LONG).show();
        if (tag == null)
            return null;
        return frag_m.findFragmentByTag(tag);
    }

    @Override
    public int getCount() {
        return 3;
    }
}

then in MainActivity i have set a onPageChangeListner :

vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {


        }

        @Override
        public void onPageSelected(int i) {

            Fragment fragment = ((inneradapter)vp.getAdapter()).getFragment(i);
            Toast.makeText(MainActivity.this,"listener is working"+fragment,Toast.LENGTH_LONG).show();

            if (i ==1 && fragment != null)
            {
                fragment.onResume();
            }

        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

So the problem i am having is when i try to getTag() of the fragment inside InstantiateIteam() i get null value . so my question is does Viewpager automatically sign tags or will i have to manually do it, if i have to manually do it then where will i assign them ?

EDIT: this is not a duplicate because i want to know if viewpager assigns a tag to its fragments.I know i can store the fragments in the hashmap directly but i was just thinking if it is possible to assign custom tags to fragments or the viewpager takes care of that , if yes then why does getTag() return null ?

Pulkit Tyagi
  • 61
  • 11

0 Answers0