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

ExpandableListView 사용중 getChildView와 getGroupView 데이터가 꼬입니다.

0 추천
public View getGroupView(int groupPosition, boolean isExpanded,
                                 View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            String iconName = null;
            ViewHolder viewHolder;

            if(convertView == null) {
                LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                viewHolder = new ViewHolder();

                convertView = inflater.inflate(R.layout.menu_item_layout, parent, false);
                viewHolder.groupText = (TextView)convertView.findViewById(R.id.menuTitle);
                viewHolder.parentLayout = (RelativeLayout)convertView;
                viewHolder.parentLayout.setTag(R.string.menuId, getGroup(groupPosition).getMenuId());
                viewHolder.indicator = (ImageView) convertView.findViewById(R.id.indicator);
                viewHolder.menuIconImage = (ImageView) convertView.findViewById(R.id.menuIcon);
                convertView.setTag(viewHolder);

            } else {
                viewHolder = (ViewHolder)convertView.getTag();
            }

            iconName = getGroup(groupPosition).getMenuIcon();

            if(getChildrenCount(groupPosition) == 0) {
                viewHolder.indicator.setImageDrawable(null);
            }

            viewHolder.groupText.setText(getGroup(groupPosition).getMenuTitle() + getChildrenCount(groupPosition));

            if(iconName != null)
                viewHolder.menuIconImage.setImageResource(getResources().getIdentifier(iconName, "drawable", getActivity().getApplicationContext().getPackageName()));

            if(viewHolder.indicator != null && isExpanded ) {
                viewHolder.indicator.setSelected(true);
            } else if(viewHolder.indicator != null && !isExpanded ) {
                viewHolder.indicator.setSelected(false);
            }
            menuListView.invalidateViews();
            Log.i("pos", " : " + groupPosition);
            Log.i("pos size", " : " + getChildrenCount(groupPosition));
            return convertView;

        }

 

위와같이 코드를 짰는데, 실제로 로그캣에는

10-23 17:46:45.665 10328-10328/com.example.btc111110_07.court I/pos:  : 0
10-23 17:46:45.665 10328-10328/com.example.btc111110_07.court I/pos size:  : 2
10-23 17:46:45.670 10328-10328/com.example.btc111110_07.court I/pos:  : 1
10-23 17:46:45.670 10328-10328/com.example.btc111110_07.court I/pos size:  : 2
10-23 17:46:45.670 10328-10328/com.example.btc111110_07.court I/pos:  : 2
10-23 17:46:45.670 10328-10328/com.example.btc111110_07.court I/pos size:  : 0
10-23 17:46:45.675 10328-10328/com.example.btc111110_07.court I/pos:  : 3
10-23 17:46:45.675 10328-10328/com.example.btc111110_07.court I/pos size:  : 0

이렇게 잘 찍힙니다.

그런데 첫번째의 pos size는 분명 2인데 자꾸 아래부분이 실행되서그런지

if(getChildrenCount(groupPosition) == 0) {
                viewHolder.indicator.setImageDrawable(null);
            }

첫 줄의 이미지가 사라져 버리네요. 이뿐만 아니라

중간에 있는 이미지도 그룹을 열었다 닫으면 사라지고 그러네요..

getView를 잘못 이해하고있는것 같아서 질문드립니다.

 

모나미153 (17,540 포인트) 님이 2015년 10월 23일 질문
convertView 재사용부분을 아예 없애버리면 해결되는걸로 봐서는
position문제 같은데..
밤새 메달렸는데도 해결될 기미가 안보입니다 ㅠㅠ

답변 달기

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