안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요, 고수님들?
제가 앱을 하나 개발 중인데 Listview의 Header/Footer의 Visibility를 설정하는 부분이 제대로
되지 않아서 질문 좀 드리고자 합니다.
ListView에서
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:visibility="gone"
>
<TextView
android:id="@+id/tv_watingtext"
android:layout_width="wrap_content" android:layout_height="wrap_content"
/>
<ProgressBar
android:layout_width="wrap_content" android:layout_height="wrap_content"
/>
</LinearLayout>
다음과 같은 레이아웃을 가지는 view를 inflate시킨 다음 Visibility를 GONE으로 바꿔서
Header와 Footer에 각각 1개씩 추가 하였습니다.
this.header_waiting = (LinearLayout)View.inflate(this, R.layout.layout_waitingbar, null); this.header_waiting.setVisibility(View.GONE); this.footer_waiting = (LinearLayout)View.inflate(this, R.layout.layout_waitingbar, null); this.footer_waiting.setVisibility(View.GONE); this.mylistview = (ListView) View.inflate(this, R.layout.layout_listview, null); this.mylistview.addHeaderView(this.header_waiting); this.mylistview.addFooterView(this.footer_waiting); this.mylistview.setAdapter(this.myadapter);
그런데 문제는,Listview의 header/footer 영역에
위에서 inflate시켜 추가한 view는 보이지 않는데 해당 view의 영역은 그대로 유지가 되는 문제가 있습니다.
이 문제를 해결 하려고 별짓 다해봤는데, header/footer로 더미 레이아웃을 하나 추가 해놓고 필요할 때마다 addView를
사용해서 필요한 view를 보여주라던가(이 방법은 addView를 해도 더미 레이아웃의 height가 재조정 되지 않아서 실패)
header/footer의 높이를 조정해서 visible/invisible상태를 조정하라던가(안 보여야 할 때는 height를 0으로)
몇 가지 해결책을 웹에서 찾아서 실행 해 보았습니다만, 하나같이 안되더군요(ㅠㅠ).
혹시 이에 대해서 조언좀 주실분 없으신가요?




리스트뷰의 갱신은 adapter 내에서 이루어져야 꼬이는 문제가없습니다. 대신 갱신이 좀더 무겁게 이루어 지는 점은 있겠죠.
더군다나 header 와 footer 는 adapter 에 데이터셋을 연결하기 전에 정해놓고, 그대로 유지되는 속성입니다.
님께서는 아마도, header footer 의 visibility 를 adapter 바깥에서 setVisivility 로 하신 듯 한데, 좋지 않은 방법이며, 잘 동작도 안됩니다.
확실한 방법은 header footer 변경이 필요할땐 adapter 자체를 새로 생성하는 겁니다.