Android fragments FragmentStatePager实例化我的片段两次

Android fragments FragmentStatePager实例化我的片段两次,android-fragments,android-viewpager,Android Fragments,Android Viewpager,我正在使用带有FragmentStatePagerAdapter的自定义viewPager创建一组片段,供用户编写特定的概要文件。用户的数据可以通过SQL根据viewpager子页面的位置进行检索。在执行时,我看到每当第一次加载并滑动到其他未缓存页面时,就会创建两次片段。我找到了referenceFragment散列映射来检索要加载一次的当前片段,而不是两个要加载的片段。你能告诉我只装载一次碎片的更好方法吗 以下是我的工作经历: static SectionsPagerAdapter mSect

我正在使用带有FragmentStatePagerAdapter的自定义viewPager创建一组片段,供用户编写特定的概要文件。用户的数据可以通过SQL根据viewpager子页面的位置进行检索。在执行时,我看到每当第一次加载并滑动到其他未缓存页面时,就会创建两次片段。我找到了referenceFragment散列映射来检索要加载一次的当前片段,而不是两个要加载的片段。你能告诉我只装载一次碎片的更好方法吗

以下是我的工作经历:

static SectionsPagerAdapter mSectionsPagerAdapter;
    static CustomViewPager mViewPager;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    mSectionsPagerAdapter = new SectionsPagerAdapter(fm);       
        dotsCount = mSectionsPagerAdapter.getCount();
        dots = new  ImageView[dotsCount];
        dots[0] = dot1;
        dots[1] = dot2;
        dots[2] = dot3;
        dots[3] = dot4;
        dots[4] = dot5;     
        dots[5] = dot6;     
        dots[6] = dot7;     
        setUiPageViewController();
        isTablet=  ReadExcel.isTabletDevice(this);
        mViewPager = (CustomViewPager) findViewById(R.id.pager);        
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager.setEnabled(true);
        mViewPager.setOffscreenPageLimit(0);
        mViewPager.setOnPageChangeListener(viewPagerPageChangeListener);

    public static class PlaceholderFragment extends Fragment  {

        private static final String ARG_SECTION_NUMBER = "section_number";

        public static PlaceholderFragment newInstance(int sectionNumber) {
        //  PlaceholderFragment fragment = new PlaceholderFragment();

            PlaceholderFragment fragment =  ((SectionsPagerAdapter)mViewPager.getAdapter()).getFragment(sectionNumber);
            if(fragment==null){
                fragment = new PlaceholderFragment();
            }
            Bundle args = new Bundle(); 
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setTag(String.valueOf(sectionNumber));
            fragment.setArguments(args);            


            return fragment;
        }

        public  String getFTag(){
            return tag;
        }

        public void setTag(String tag) {
            this.tag = tag;
        }


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState); 

....}}

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {


        private Map<Integer, PlaceholderFragment> mPageReferenceMap = new HashMap<Integer, PlaceholderFragment>();


        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getItemPosition(Object object) {
            return PagerAdapter.POSITION_NONE;
        }


        @Override
        public Fragment getItem(int position) {
            for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
                fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);                        
            } 


            PlaceholderFragment pf =  PlaceholderFragment.newInstance(position);
            mPageReferenceMap.put(Integer.valueOf(position), pf);

            return pf;
        }

        @SuppressWarnings("deprecation")
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            super.destroyItem(container, position, object);
            mPageReferenceMap.remove(Integer.valueOf(position));

            // mPageReferenceMap.remove(position);
        }

        public PlaceholderFragment getFragment(int key) {

            return mPageReferenceMap.get(key);
        }



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

        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
            case 0:
                return getString(R.string.title_section1).toUpperCase(l);
            case 1:
                return getString(R.string.title_section2).toUpperCase(l);
            }
            return null;
        }
    }
static section spageradapter msection spageradapter;
静态CustomViewPager mViewPager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mSectionsPagerAdapter=新节spageradapter(fm);
dotscont=mSectionsPagerAdapter.getCount();
dots=新图像视图[DOTSCONT];
点[0]=dot1;
点[1]=点2;
点[2]=点3;
点[3]=点4;
点[4]=点5;
点[5]=点6;
点[6]=点7;
setUiPageViewController();
isTablet=ReadExcel.isTabletDevice(此);
mViewPager=(CustomViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setEnabled(true);
mViewPager.setOffscreenPageLimit(0);
mViewPager.setOnPageChangeListener(viewPagerPageChangeListener);
公共静态类占位符片段扩展了片段{
私有静态最终字符串ARG\u SECTION\u NUMBER=“SECTION\u NUMBER”;
公共静态占位符片段newInstance(int sectionNumber){
//占位符片段=新占位符片段();
占位符片段片段=((SectionsPagerAdapter)mViewPager.getAdapter()).getFragment(sectionNumber);
if(片段==null){
fragment=新的占位符fragment();
}
Bundle args=新Bundle();
参数Putin(参数段号,段号);
fragment.setTag(String.valueOf(sectionNumber));
fragment.setArguments(args);
返回片段;
}
公共字符串getFTag(){
返回标签;
}
公共void setTag(字符串标记){
this.tag=tag;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
super.onCreateView(充气机、容器、保存状态);
....}}
公共类节SpagerAdapter扩展FragmentStatePagerAdapter{
私有映射mPageReferenceMap=newhashmap();
公共部分SpagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
public int getItemPosition(对象){
返回PagerAdapter.POSITION\u无;
}
@凌驾
公共片段getItem(int位置){
对于(int i=0;i