2015-06-20 29 views
2

我的ViewPager图像滑块库存在问题。我将页面限制设置为3,但随后我的应用程序在第三张图像上截断,因为孩子已经是父母了。我为这个数字设置了限制,因为我想避免大量的内存泄漏,它使用了3个镜像的事件,比如150Mb的分配内存,这个数量非常庞大。也许如果我在上传之前调整图像大小,我可以让它们使用更多页面?不管怎么说,这是我的viewPager代码:设置页面限制太小时ViewPager上的Android InvalidStateException

ViewPager mViewPager = (ViewPager) findViewById(R.id.imagepager); 
    ViewerAdapter adapter = new ViewerAdapter(this); 
    //adapter.notifyDataSetChanged(); 
    mViewPager.setAdapter(adapter); 
    mViewPager.setOffscreenPageLimit(3); 
    mViewPager.setCurrentItem(number); 
    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      time.setText(caluculateTimeAgo(MainActivity.time[position])); 
      if (MainActivity.distances[position] < 1000) { 
       dist.setText(String.valueOf(MainActivity.distances[position]) + "m"); 
      } else { 
       long f = (long) (MainActivity.distances[position]/1000); 
       dist.setText(String.valueOf(f) + "km"); 
      } 
      author.setText(MainActivity.users[position]); 
      text.setText(MainActivity.text1[position]+MainActivity.tags[position]); 
     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

,这里是我的适配器定义:

public class ViewerAdapter extends PagerAdapter { 
    Context mContext; 
    public ViewerAdapter(Context context) { 
     mContext = context; 
     mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    LayoutInflater mLayoutInflater; 
    @Override 
    public int getCount() { 
     return MainActivity.imgLink.length; 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == (View) arg1; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View) object); 
     Picasso.with(container.getContext()).cancelRequest((ImageView) object); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return (position + "/" + getCount()); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     final View itemView = mLayoutInflater.inflate(R.layout.pager_item,container,false); 
     final ImageView photo = (ImageView) itemView.findViewById(R.id.photoSlide); 
     photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       fullscreen = ((BitmapDrawable)photo.getDrawable()).getBitmap(); 
       Intent intent = new Intent(ShowMarkerContent.this, FullScreenImageActivity.class); 
       startActivity(intent); 
      } 
     }); 
     Picasso.with(container.getContext()).load("MyWebsite" + MainActivity.imgLink[position]).into(photo); 
     container.addView(photo); 
     return photo; 
    } 
} 

回答

0

好吧,我设法让一个解决这个问题。我忘了设置照片的裁剪,因此照片太大了。此外,我设置offScreenPageLimit为30以避免此错误(这是解决方法,因为有大量图像它会出现内存不足错误)所以现在,这里是我的适配器代码:

@Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     final View itemView = mLayoutInflater.inflate(R.layout.pager_item,container,false); 
     final ImageView photo = (ImageView) itemView.findViewById(R.id.photoSlide); 
     photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       fullscreen = ((BitmapDrawable)photo.getDrawable()).getBitmap(); 
       Intent intent = new Intent(ShowMarkerContent.this, FullScreenImageActivity.class); 
       startActivity(intent); 
      } 
     }); 
     Picasso.with(container.getContext()).load("MyWebsite" + MainActivity.imgLink[position]).fit().centerCrop().into(photo); 
     container.addView(itemView); 
     return itemView; 
    }