[안드로이드] ListView의 Header 와 Footer 여러 개 넣고 사용하기

 ListView 에 Header 와 Footer 를 여러 개 넣고 사용하려면 우선 setAdapter 를 하기 전에 addHeaderView와 addFooterView 함수를 통해 Header 와 Footer 를 모두 추가해야합니다. 그리고 setVisibility 함수를 사용해서 원하는 Header 와 Footer 를 남기면 됩니다. 전 글에서도 작성했듯이 addFooterView 함수는 사실 setAdapter 전에 dummy layout 하나 추가해두고 사용하면 되긴 하는데, 성능에 영향을 미치는 layout 이 아니라면 미리 다 추가해 두고 사용하는 것이 좋을 것 같다고 생각합니다.

 setVisibility 함수를 사용하는데 주의해야 할 점은 전체 View 에 대해서 setVisibility 를 GONE로 적용해도 빈 공간이 나온다는 점입니다. 이럴 경우 layout 안에 전체 layout 을 감싸고 있는 layout 객체에 적용을 하면 잘 되는 것을 확인하였습니다.

 이러한 전체적인 부분을 “더보기” 와 같은 기능을 가진 컴포넌트로 만들 수 있습니다. ListView를 많이 사용하는 어플리케이션이나 앞으로 만들 어플리케이션들이 이러한 기능을 가지고 있다면 전체적인 부분에 대해서 컴포넌트화 시켜두면 좋을 것이라 생각합니다.

– 안드로이드 2.1 & 2.2 버전에서 테스트 되었습니다.



9 thoughts on “[안드로이드] ListView의 Header 와 Footer 여러 개 넣고 사용하기

  1. 안녕하세요 저도 더보기 기능을 구현중에 setVisible을 두고 빈공간이 나오는 문제로 골치를 썩고있는데요
    layout안에 전체 layout을 감싸고있는 layout객채에 적용한다는 무슨말인가요/..

    예를들어 제가 listView에 마지막아이템이 footer이면
    listView.getChildAt(lastIndex -1).setVisibilty(View.GONE);
    이런식으로 주웠습니다. 위에서 말씀하신대로 빈공간이 나오는 문제가 있죠
    저 아이템을 감싸고 있는 layout이라함은 무엇을말하는 건가요??
    저위에 있는건 listview가아닌가요? 그럴경우 listVIew전체가 안보이는거구요.

    안되서 romoveFooter를 사용해도 여러 문제가 발생하네요 ㅠㅠ
    도움좀주세요!

    1. Footer 에 들어가는 View의 최상의 Layout을 setVisible 적용하는 것이 아니구요. 그 Layout의 하위 레이아웃에다가 적용을 해보세요^^ listView에다가 적용하는 것은 아니구요.
      Footer에 들어가는 View에 보톤 view.setVisible 하는데..
      view.findviewid 해서 그 하위 layout에다가 하는 것입니다..
      이해를 하셨을지 모르겠네요^^

  2. 안녕하세요
    ListView의 Footer 때문에 검색하다가 들어왔습니다^^
    Footer를 ListView에 추가하려면 setAdapter()전에 추가를 해야하잖아요.
    제가 격는 상황을 조금만 이야기 할께요. ListView의 아이템 개수가 제한개수보다 초기에는 적을 수 있어요. 그런데 어떤 동작에 의해서 아이템 개수가 제한개수보다 많아지면, Footer를 추가해야하는 상황이라면 어떻게 해야하나요?
    초기에 더미Footer를 추가하고, FooterView 자체 또는 그 하위 View에게 INVISIBLE을 했는데도 틀은 남아있네요.
    어떻게 해야 Footer 자체가 있었단 사실을 감출 수 있을까요…?

  3. 이제서야 답글을 봤네요 ㅠ
    ListView에서 FooterView를 setAdapter() 전에 추가를 한 뒤, 제거를 하면 다시 FooterView를 추가가 안되더군요.
    최소한 setAdapter() 전에 FooterView 1개는 있어야 추가가 가능한가 보네요.
    그래서 FooterView layout을 구성하는 뷰에 INVISIBLE을 설정해도 FooterView 틀은 남아있더라구요.
    시간이 새벽 1시라..집에서 작성하는거라.. 아직 안해봤지만.. GONE으로 하면 그 틀이 사라진다는 말씀이지요?
    답글 감사합니다.

  4. header를 SetVisible(View.GONE) 해도 공간이 남아서 해결책을 찾고있었는데
    의외로 간단한 거였네요.. 이거때메 오랜시간 삽질할 뻔했어요…ㅎㄷㄷ;;;
    정말 감사합니다~!! ^^

답글 남기기

이메일 주소는 공개되지 않습니다.