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