我正在尝试构建一个视图分页器,所以当我滚动下一个片段时,刷新以适应前一个片段中可能发生在数据库中的更改。 我的片段适配器是:
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;
}
}
然后在MainActivity中我设置了一个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) {
}
});
所以我遇到的问题是当我尝试在InstantiateIteam()中获取片段的getTag()时,我得到空值。 所以我的问题是Viewpager会自动签署标签还是我必须手动执行,如果我必须手动执行它,那么我将在哪里分配它们?
编辑:这不是重复的,因为我想知道viewpager是否为其片段分配了一个标签。我知道我可以直接将片段存储在hashmap中但我只是想它是否是可以为片段分配自定义标签,或者viewpager负责处理,如果是,那么为什么getTag()会返回null?