안드로이드 listview 질문있습니다


@Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = inf.inflate(R.layout.list_group, parent, false);

                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.lblListHeader);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            ImageView imageView = (ImageView) convertView.findViewById(R.id.indicator);
            if(isExpanded){
                imageView.setImageResource(R.drawable.arrowup);
            } else {
                imageView.setImageResource(R.drawable.arrowdown);
            }
            holder.text.setText(getGroup(groupPosition).toString());
             return convertView;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }

        private class ViewHolder {
            TextView text;
        }
    }
}

한 fragment 안에서 expandable 리스트뷰를 구현하였는데요. 리스트뷰가 펼쳐지면 arrowup 아이콘, 닫히면 arrowdown 을 넣고싶습니다.

ImageView imageView = (ImageView) convertView.findViewById(R.id.indicator);
            if(isExpanded){
                imageView.setImageResource(R.drawable.arrowup);
            } else {
                imageView.setImageResource(R.drawable.arrowdown);
            }

이 부분에서 문제인 것 같은데 어떤 식으로 넣어야 될까요ㅜㅜ?

  • 2016년 05월 27일에 작성됨

조회수 199


1 답변


그룹 뷰를 클릭하거나 Expand/Collapse 했을 때, 이미지가 변경되지 않는 이유는 getGroupView() 함수의 호출 시점 때문입니다. 이 함수는 그룹 뷰를 화면에 보여줄 때 호출되는 함수이기 때문에 getGroupView() 내에서의 isExpanded 값은 화면에 그려질 당시의 상태 값일 뿐입니다.

정리하면 그룹 뷰를 클릭하거나 expandGroup()/collapseGroup() 함수를 실행했을 때 getGroupView()가 다시 호출되지 않으므로 이미지가 변경되지 않는 것입니다. 아래 리스너를 활용해서 이미지 변경 코드를 적용해보세요.

  • setOnGroupCollapseListener
  • setOnGroupExpandListener
  • setOnGroupClickListener

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close