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

리스트뷰 getview IndexOutofBoundsException 질문드려요 ㅜ

0 추천

getview안에 조건문을 두고 조건에 성립하지 않으면 position값을 통해 지워서 조건에 만족하는 데이터의 갯수를 뿌리려고합니다.

현재는 꼼수로 리스트뷰에 안보이게하려고 Visible을 사용했는데 갯수를 뽑아내고자 조건에 만족하지 않은 position을 따라 remove를 하는데 IndexOutofBoundsException에러가 뜨고 죽어버립니다..ㅠㅠ 

public View getView(int position, View convertView, ViewGroup parent) {

        final customCell cell = mList.get(position);
        viewHolder = new ViewHolder();

        if (convertView == null) {
            convertView = mInflater.inflate(mResource, null);
            viewHolder.tTextView = (TextView) convertView.findViewById(R.id.list_tag);  //24byte
            viewHolder.cTextView = (TextView) convertView.findViewById(R.id.list_count); //카운트갯수
            viewHolder.material_num = (TextView) convertView.findViewById(R.id.material_num);//자재번호
            viewHolder.manufac_num = (TextView) convertView.findViewById(R.id.manufac_num);//제조번호
            viewHolder.info_btn = (TextView) convertView.findViewById(R.id.info_btn);//상세보기버튼
            
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
//        if (cell.getName() != null) {
            if (Integer.parseInt(CalculationUtil.TagValue0(cell.getName())) == 0) { //0일때 개별

                viewHolder.manufac_num.setVisibility(View.VISIBLE);
                viewHolder.material_num.setVisibility(View.VISIBLE);
                viewHolder.info_btn.setVisibility(View.VISIBLE);

                viewHolder.tTextView.setText(cell.getName());//태그번호
                viewHolder.cTextView.setText(cell.getValue());//카운트

                viewHolder.material_num.setText(CalculationUtil.TagValue2(cell.getName()));//자재번호
                viewHolder.manufac_num.setText(CalculationUtil.TagValue3(cell.getName()));//제조번호

                viewHolder.info_btn.setFocusable(false);//
//                viewHolder.info_btn.setOnClickListener(new View.OnClickListener() {  //상세보기 버튼 이벤트
//                    @Override
//                    public void onClick(View v) {
//
//                        Toast.makeText(getContext(), "태그번호::" + cell.getName(), Toast.LENGTH_SHORT).show();
//
//                        Intent in = new Intent(con, TagInfoActivity.class);
//
//                        in.putExtra("result_make", CalculationUtil.TagValue1(cell.getName()));//제조사
//                        in.putExtra("result_matrial_i", CalculationUtil.TagValue2(cell.getName())); //자재 번호
//                        in.putExtra("result_manufac_i", CalculationUtil.TagValue3(cell.getName()));  //제조 번호
//
//                        con.startActivity(in);
//                    }
//                });
            } else {
             //   remove(cell);
//                mList.remove(position);
//                remove(mList.get(position));
                viewHolder.manufac_num.setVisibility(View.GONE);
                viewHolder.material_num.setVisibility(View.GONE);
                viewHolder.info_btn.setVisibility(View.GONE);
//                Log.i("eeeeeeeee", "getCount::" + mList.size());
            }
//        }
        return convertView;
    }
 
초짜 프로그래머좀 도와주십시옹...ㅠ
구시포 (2,750 포인트) 님이 2016년 8월 17일 질문
조건에 만족하지 않은 행을 삭제하고 리스트뷰에 띄우는방법이나

 visible,gone을 사용하여 실제 조건에 만족하는 값만 보여주고 그 조건에 만족하는 행의 갯수를 호출하는 방법을 알고싶습니다.. 도와주세욘..
행 삭제하는 로직을 리스트뷰를 그리는 밖에서 처리하시고 리스트 뷰를 그리는 식으로 해보세요.
getView안에서 해당 작업을 할 경우는 처리하기가 수월하지 않을 것 같습니다.
collection객체를 두개 사용해서 작업을 하셔도 될 듯합니다. 원본 데이터를 저장하는 거 하나, 삭제나 필터링 처리한 결과를 저장하는 거 하나. 화면 그리는 작업은 2번째 거를 가지고 하시면 될 듯합니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...