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

Expandable listview에서 그룹 클릭했을 때 다른 열린 그룹 닫기 질문이있습니다

0 추천
Expan_list.setOnGroupClickListener(new OnGroupClickListener(){

  @Override
  public boolean onGroupClick(ExpandableListView arg0, View arg1,
    int position, long arg3) {
   
   for(int item_i=0; item_i<arg0.getCount(); item_i++){
    if(item_i != position && arg0.isGroupExpanded(item_i) ){
     arg0.collapseGroup(item_i);
    }
   }
   return false;
  }
     
    });

Expandable listview에서 열려진 그룹이 있을때 닫지 않고 다른 그룹을 열었을 때 원래 열려있던 그룹을 닫히게 하고싶습니다.

 

child가 존재하는 3개의 그룹이 있고 처음에 다 닫혀있습니다.

첫번째 그룹을 클릭해서 child가 열리고 두번째 그룹을 클릭했을 때 -> 첫번째 그룹은 닫히고 두번째 그룹이 반응이 없습니다.

하지만 반대로 두번째 그룹을 클릭해서 child가 열리고 첫번째 그룹을 클릭 했을 때 -> 두번째 그룹은 닫히고 첫번째 그룹은 열립니다. (정상반응)

 

for문이 문제인가 해서 따로

if(position == 0){

arg0.collapseGroup(position+1);

}

if(position ==1){

arg0.collapseGroup(position-1);

}

이렇게 해서 실행해 봐도 위 그룹 누르고 아래 그룹눌렀을때는 둘다 닫혀버립니다 .. 왜그런거죠 ㅠㅠ

 

따로 간단하게 옵션을 설정할 수 있나요?? 아니면 어떻게 해결해야 할지 도와주세요 부탁드립니다..ㅠㅠ

 

박배찌 (220 포인트) 님이 2014년 10월 27일 질문

1개의 답변

0 추천
 
채택된 답변
private OnGroupClickListener setOnGroupClickEvent = new OnGroupClickListener() {
		int lastClickedPosition = 0;

		@Override
		public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
			// TODO Auto-generated method stub
			
			// 선택 한 groupPosition의 펼침/닫힘 상태 체크
			Boolean isExpand = (!mExpandList.isGroupExpanded(groupPosition));
			
			// 이 전에 열려있던 group 닫기
			mExpandList.collapseGroup(lastClickedPosition);
			
			if(isExpand){
				mExpandList.expandGroup(groupPosition);
			}
			lastClickedPosition = groupPosition;
			return true;
		}
    };

 

1. 현재 선택 한 그룹의 펼침/닫힘 상태를 체크

2. lastClickedPosition 그룹의 메뉴를 닫아줌

3. 현재 선택 한 그룹이 닫혀있으면 펼쳐줌

4. 현재 선택한 그룹을 lastClickedPosition에 대입해줌

 

 

for문으로 처리하지 마시고 index로 한번 해 보세요~

까먹지 (3,960 포인트) 님이 2014년 10월 28일 답변
박배찌님이 2015년 4월 13일 채택됨
...