0

我有一个pageradapter,我用来显示图像幻灯片,但它崩溃时,我设置较低的屏幕限制。Pager适配器崩溃

这里是我的代码

public class ProjectPicturesAdapter extends PagerAdapter { 

private List<String> pictures; 
private LayoutInflater inflater; 
private final RequestManager glide; 

public ProjectPicturesAdapter(RequestManager glide, LayoutInflater inflater, List<String> pictures) { 
    this.pictures = pictures; 
    this.glide = glide; 
    this.inflater = inflater; 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    View image = inflater.inflate(R.layout.slider_image, container, false); 
    ImageView myImage = (ImageView) image.findViewById(R.id.image); 

    glide.load(pictures.get(position)) 
      .centerCrop() 
      .crossFade() 
      .placeholder(R.drawable.project_placeholder) 
      .into(myImage); 
    container.addView(myImage); 
    return myImage; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object view) { 
    container.removeView((View) view); 
} 


@Override 
public int getCount() { 
    return pictures.size(); 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view.equals(object); 
} 

} 

我正在初始化适配器的方式是这样的

 ProjectPicturesAdapter picturesAdapter = new 
     ProjectPicturesAdapter(Glide.with(this), LayoutInflater.from(this), 
     images); 

     ViewPager pager = (ViewPager) findViewById(R.id.viewPager); 
     pager.setAdapter(picturesAdapter); 
     pager.setOffscreenPageLimit(1); 

如果有2倍以上的图像,然后它崩溃了,我可以随时增加戏外极限但如果有20张图片会发生什么情况,我无法将屏幕外限制保持为20.

我的故障日志出现错误,说明指定的孩子已经有父母。您必须先调用子对象的父对象的removeView()。

+0

使用FragmentStatePagerAdapter和尝试。 –

回答

1

更新ProjectPicturesAdapter如下:

public class ProjectPicturesAdapter extends PagerAdapter { 

private List<String> pictures; 
private LayoutInflater inflater; 
private final RequestManager glide; 

public ProjectPicturesAdapter(RequestManager glide, LayoutInflater inflater, List<String> pictures) { 
    this.pictures = pictures; 
    this.glide = glide; 
    this.inflater = inflater; 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    ViewGroup view = (ViewGroup) inflater.inflate(R.layout.slider_image, container, false); 
    ImageView myImage = (ImageView) view.findViewById(R.id.image); 

    glide.load(pictures.get(position)) 
      .centerCrop() 
      .crossFade() 
      .placeholder(R.drawable.project_placeholder) 
      .into(myImage); 

    container.addView(view); 

    return view; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object view) { 
    container.removeView((View) view); 
} 

@Override 
public int getCount() { 
    return pictures.size(); 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == object; 
} 

} 
0

问题是由这个原因引起:

@Override 
public void destroyItem(ViewGroup container, int position, Object view) 
{ 
    container.removeView((View) view); 
} 

我建议使用FragmentStatePagerAdapter而不是PagerAdapter。

public static class MyAdapter extends FragmentStatePagerAdapter { 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     return ArrayListFragment.newInstance(position); 
    } 
} 

mAdapter = new MyAdapter(getFragmentManager()); 

mPager = (ViewPager)findViewById(R.id.pager); 
mPager.setAdapter(mAdapter); 
+0

但我不需要在这里显示片段,我只有一个图像视图布局 –

相关问题