마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰페이저 에러 질문..이전에 질문했떤건 해결했는데..다른문제가..

0 추천

질문입니다..

뷰페이저에서 약 20장을 뿌려줘야 하는데

 

3장까지만 뿌려줍니다.. (어레이리스트가 아닌, drawable의 이미지파일로 확인해봐도 3장까지)

한마디로 사진을 2번넘기면 에러가나서 종료가 됩니다 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

class ViewPager_Adapter extends PagerAdapter{
  생략..
    public ViewPager_Adapter( Context context, int length ) {
        Bitmap_ArrayList arry = Bitmap_ArrayList.getInstance();
        mContext = context;
        this.length = arry.size();
        Log.d("메시지","어레이 length^^: "+length);
    }
    public int getCount() {
        return length;
    }
    
    public Object instantiateItem(ViewGroup container, int position) {
        Log.d("메시지","position ="+position);
        
        ViewPager_Layout page = new ViewPager_Layout(mContext);

   
        page.setImage(resIds[position]);
        
      
        container.addView(page, position);

        return page;
    }

 

class ViewPager_Layout extends LinearLayout{
   static Bitmap[] bitmap;
    public ViewPager_Layout(Context context) {
        ..생성자 생략..
    private void init(Context context) {
        mContext = context;

       
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.viewpager_imageview, this, true);

        iconImage = (ImageView) findViewById(R.id.imageView);


    }
    private void list_to_arry(Bitmap_ArrayList a){
        int size = a.size();
        Log.d("메시지","배열로 바꾸는데, 리스트의 사이즈는 : "+size);
    }

    public void setImage(int index) {

        Log.d("메시지","get부분 바로 앞");
        Log.d("메시지","인덱스값 "+index );
        Log.d("메시지","어레이 비었나??  "+arry.contains(index));
         iconImage.setImageBitmap(arry.get(index));
        Log.d("메시지","get부분 바로 뒤");

 

로그입니다.

D/메시지: get부분 바로 앞
D/메시지: 인덱스값 0
D/메시지: 어레이 비었나??  false
D/메시지: get부분 바로 뒤
D/메시지: position =1
D/메시지: 배열로 바꾸는데, 리스트의 사이즈는 : 26
D/메시지: get부분 바로 앞
D/메시지: 인덱스값 1
D/메시지: 어레이 비었나??  false
D/메시지: get부분 바로 뒤
D/메시지: 뷰페이저 동작중에 밑에코드 실행중..
D/메시지: position =2
D/메시지: 배열로 바꾸는데, 리스트의 사이즈는 : 26
D/메시지: get부분 바로 앞
D/메시지: 인덱스값 2
D/메시지: 어레이 비었나??  false
D/메시지: get부분 바로 뒤
D/메시지: position =3
D/메시지: 배열로 바꾸는데, 리스트의 사이즈는 : 26
D/메시지: get부분 바로 앞
D/메시지: 인덱스값 3
D/메시지: 어레이 비었나??  false
D/메시지: get부분 바로 뒤

 

에러메시지

 FATAL EXCEPTION: main
                  Process:  PID: 3504
                  java.lang.IndexOutOfBoundsException: index=3 count=2
                      at android.view.ViewGroup.addInArray(ViewGroup.java:4559)
                      at android.view.ViewGroup.addViewInner(ViewGroup.java:4476)
                      at android.view.ViewGroup.addView(ViewGroup.java:4295)
                      at android.support.v4.view.ViewPager.addView(ViewPager.java:1477)
                      at android.view.ViewGroup.addView(ViewGroup.java:4235)

 

 

 

익명사용자 님이 2016년 10월 11일 질문

2개의 답변

0 추천

index는 3인데 count는 2네요

이쪽 문제일거 같네요

 this.length = arry.size();
        Log.d("메시지","어레이 length^^: "+length);
    }
    public int getCount() {
        return length;
    }
익명사용자 님이 2016년 10월 11일 답변
length는.. 어레이 사이즈를 받아오는 거기때문에..
크기가 충분합니다...ㅠㅠㅠㅠ
왜이런지 모르겠네요
에러메시지에서 말하는 count가 정확히 무엇을 나타내는거죠....?
0 추천
page.setImage(resIds[position]);

resIds에 어떤 값들이 들어있는지는 모르겠지만 resIds[position]으로 얻어진 값이 뭔지 디버깅을 잘 해보세요. 

page.setImage(position);

아마도 님은 위의 코드의 결과를 예상하시고 있는 거 같아 보여요. position과 resIds[position]은 분명 다른 값으로 보여요.

spark (227,830 포인트) 님이 2016년 10월 11일 답변
...