view pager会自动为其片段分配Tag(setTag())吗?

时间:2015-04-23 17:50:54

标签: android android-fragments android-viewpager fragmentstatepageradapter

我正在尝试构建一个视图分页器,所以当我滚动下一个片段时,刷新以适应前一个片段中可能发生在数据库中的更改。 我的片段适配器是:

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?

0 个答案:

没有答案