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