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 ?