본문 바로가기
Android

listview를 이용해 이중 구조로 adapter를 사용할 때 height이 고정되는 문제

by 루에 2015. 2. 11.
반응형

ListView 2개를 이중 구조로 메뉴 구성을 할 때, 서브로 사용되는 ListView의 높이가 메인의 아이템 1개 높이로 고정되는 문제가 있다.


이를 해결하기 위해 여러가지를 찾아봤고, ListView를 초기화 한 뒤 데이터를 갱신시킨 후 ListView의 높이를 계산해 LayoutParams를 설정해 다시 호출하는 방법이 가장 효과적이었다.


                ListAdapter adapter = menu.subMenuView.getAdapter();    // ListView의 adapter를 얻는다

                int totalHeight = 0;        // 계산할 높이

// 서브 ListView에 있는 아이템의 갯수만큼 반복해 높이에 더해준다

                for (int i = 0; i < adapter.getCount(); i++) {   

                    View listItem = adapter.getView(i, null, menu.subMenuView);

                    listItem.measure(0, 0);

                    totalHeight += listItem.getMeasuredHeight();

                }

//    LayoutParams를 이용해 높이를 넣고 ListView를 갱신시킨다.

                ViewGroup.LayoutParams params = menu.subMenuView.getLayoutParams();

// 빨간 부분은 없어도 됨

                params.height = totalHeight + (menu.subMenuView.getDividerHeight() * (adapter.getCount() - 1));

                menu.subMenuView.setLayoutParams(params);

                menu.subMenuView.requestLayout();



이 방법이 정답은 아니라고 생각한다. 무엇보다 메인 메뉴를 클릭할 때마다 해당 코드가 실행되므로 속도 측면에서 손해를 보게 된다.(오버헤드가 크지 않아서 눈에 띄지 않지만) 이 방법을 사용하다가 추후 다른 방법을 생각해봐야겠다.






출처 http://wefu.tistory.com/64

반응형

댓글