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

뷰페이저 에러 질문합니다..고수님들 도와주세요

0 추천

ViewPager_Adapter 클래스의 생성자의 length는 

bitmap 객체의 Arraylist.size()를 받습니다.(arraylist 길이요..)

이 값이 instantiateItem() 에서 position 값( 만들어지는 페이지 갯수 맞죠?)에 전달을 합니다. 

 

ViewPager_Layout클래스의 setImage() 에서 BitmapArraylist 에서 bitmap 을 받아서

순서대로 그림을 그립니다.

 

뷰 페이져 화면에 뿌려지는 것까지는 제대로 작동합니다.

그런데.. 페이지를 한번 넘겨버리면 에러나면서 꺼져버리네요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public class ViewPager_Adapter extends PagerAdapter {


    
    private Context mContext;
    int length;

    

    public ViewPager_Adapter( Context context, int length ) {
        mContext = context;
        this.length = length;
    }

  
    public int getCount() {
        return length;
    }

    
    public Object instantiateItem(ViewGroup container, int position) {
        // create a instance of the page and set data
        ViewPager_Layout page = new ViewPager_Layout(mContext);

        page.setImage(position);
        
        // 컨테이너에 추가
        container.addView(page, position);

        return page;
    }

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

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

}

 

public class ViewPager_Layout extends LinearLayout{

    Context mContext;
    ImageView iconImage;
    
    public ViewPager_Layout(Context context) {
        super(context);

        init(context);
    }

    public ViewPager_Layout(Context context, AttributeSet attrs) {
        super(context, attrs);

        init(context);
    }

    private void init(Context context) {
        mContext = context;

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

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


    }

    public void setImage(int index) {
        Bitmap_ArrayList list = Bitmap_ArrayList.getInstance();
        Bitmap bitmap = list.get(index);
        iconImage.setImageBitmap(bitmap);

    }
}

 

 

다음은 에러메시지입니다.

 

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.pc.gifttobible, PID: 4387
                  java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
                      at java.util.ArrayList.get(ArrayList.java:411)

 

 

 

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

1개의 답변

0 추천

에러 메세지의 대부분의 힌트가 들어있는 것 같습니다.

java.lang.IndexOutOfBoundsException: Index: 2

indexOutOfBoundsException은, 예를 들면 3개 가진 ArrayList에 get(3)하면 에러가 나는 경우와 같이 멤버의 인덱스 범위를 벗어날 때 생기는 에러입니다. 따라서 님의 코드 중에는 아래코드 부분이 의심스럽습니다. 디버깅해보면 정확하게 에러나는 지점을 알 수 있습니다.

Bitmap bitmap = list.get(index);
spark (230,170 포인트) 님이 2016년 10월 10일 답변
저는..왜 Bitmap bitmap = list.get(index);
코드에서 에러가나는지 모르겠네요.
분명히 list는 25번 까지 있는데.....
제가 알 수 있는 것은 에러메세지를 가지고 추측하는 것 뿐입니다. ArrayList.java:411 라고 되어 있고 그 부분이 코드가
if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
입니다. ArrayList의 get 메소드를 호출하는 부분입니다. 다른 곳에는 관련 코드가 없어 보이므로 그렇게 추측됩니다. 디버깅을 line by line으로 차근차근 해보세요.
...