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

안녕하세요. 어댑터 설정시 ArrayIndexOutOfBoundsException: length=12; index=-1 에러 질문드려도 될까요?

0 추천

at java.util.ArrayList.get(ArrayList.java:310)
    at com.android.photos.views.GridViewWithHeaderAndFooter$HeaderViewGridAdapter.getView(GridViewWithHeaderAndFooter.java:702)
    at com.android.photos.views.GridViewWithHeaderAndFooter.getRowHeight(GridViewWithHeaderAndFooter.java:381)
    at com.android.photos.views.GridViewWithHeaderAndFooter.setAdapter(GridViewWithHeaderAndFooter.java:426)
    at com.shop.ShopHome$19.postTask(ShopHome.java:1394)
    at android.app.ActivityThread.main(ActivityThread.java:5335)

에러나는 부분 // 표시

cartList = GridViewWithHeaderAndFooter

homeCartAdapter = new HomeCartAdapter(ShopHome.this , R.id.cartList , sumCartList);        
cartHolder.cartList.setAdapter(homeCartAdapter); // error

 

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (DEBUG) {
                Log.d(LOG_TAG, String.format("getView: %s, reused: %s", position, convertView == null));
            }
            // Header (negative positions will throw an ArrayIndexOutOfBoundsException)
            int numHeadersAndPlaceholders = getHeadersCount() * mNumColumns;
            if (position < numHeadersAndPlaceholders) {
                View headerViewContainer = mHeaderViewInfos.get(position / mNumColumns).viewContainer;
                if (position % mNumColumns == 0) {           // error-------------
                    return headerViewContainer;
                } else {
                    if (convertView == null) {
                        convertView = new View(parent.getContext());
                    }
                    // We need to do this because GridView uses the height of the last item
                    // in a row to determine the height for the entire row.
                    convertView.setVisibility(View.INVISIBLE);
                    convertView.setMinimumHeight(headerViewContainer.getHeight());
                    return convertView;
                }
            }

public int getRowHeight() {
        if (mRowHeight > 0) {
            return mRowHeight;
        }
        ListAdapter adapter = getAdapter();
        int numColumns = getNumColumnsCompatible();

        // adapter has not been set or has no views in it;
        if (adapter == null || adapter.getCount() <= numColumns * (mHeaderViewInfos.size() + mFooterViewInfos.size())) {
            return -1;
        }
        int mColumnWidth = getColumnWidthCompatible();
        View view = getAdapter().getView(numColumns * mHeaderViewInfos.size(), mViewForMeasureRowHeight, this);  // error ----------------
        AbsListView.LayoutParams p = (AbsListView.LayoutParams) view.getLayoutParams();
        if (p == null) {
            p = new AbsListView.LayoutParams(-1, -2, 0);
            view.setLayoutParams(p);
        }
        int childHeightSpec = getChildMeasureSpec(
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 0, p.height);

 @Override
    public void setAdapter(ListAdapter adapter) {
        mOriginalAdapter = adapter;
        if (mHeaderViewInfos.size() > 0 || mFooterViewInfos.size() > 0) {
            HeaderViewGridAdapter headerViewGridAdapter = new HeaderViewGridAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);
            int numColumns = getNumColumnsCompatible();
            if (numColumns > 1) {
                headerViewGridAdapter.setNumColumns(numColumns);
            }
            headerViewGridAdapter.setRowHeight(getRowHeight());  // error ------
            super.setAdapter(headerViewGridAdapter);
        } else {
            super.setAdapter(adapter);
        }
    }
        int childWidthSpec = getChildMeasureSpec(
                MeasureSpec.makeMeasureSpec(mColumnWidth, MeasureSpec.EXACTLY), 0, p.width);
        view.measure(childWidthSpec, childHeightSpec);
        mViewForMeasureRowHeight = view;
        mRowHeight = view.getMeasuredHeight();
        return mRowHeight;
    }

 

LevelUpYouCan (190 포인트) 님이 2015년 9월 10일 질문

1개의 답변

0 추천
Adapter 에서 getCount()를 오버라이드해서 구현하셨나요?
Gradler (109,780 포인트) 님이 2015년 9월 10일 답변
...