adapter 를 사용해서 커스텀 listview 를 만들고 id 를
android:id="@+id/objectlist_list"
와 같이 사용했습니다.
그리고 지금까지 잘 동작했는데 문득 아이템이 없을 때의 처리를 하고파서
아래와 같이 textvidw 를 추가했습니다.
<com.test.app.cust_list
android:id="@+id/objectlist_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#f4f4ef"
android:cacheColorHint="@null"
android:listSelector="#00000000"
/>
<TextView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:text="@string/list_noitem"
android:layout_gravity="center"
android:id="@+id/android:empty"
/>
그런데 아이템 없음 문구가 나오질 않네요.. 제가 뭔가 잘못생각하고 있는게 있을까요?
리스트에 android:id="@android:id/list" 를 쓰는경우는 기본 api에 포함된 list형태를 사용하여 ListActivty를 상속해서 사용할 시에 필요한 것이지 Activity를 상속해서 내부적으로 리스트뷰를 포함시킬 경우에도 강제되는 부분은 아닙니다.
위의 경우 상위 레이아웃이 뭔지는 모르겠지만 list속성만보면 width, height가 모두 fill_parent로 상위 뷰그룹에서 전달받은 화면을 모두 사용하게 됩니다. 즉 textview객체 자체는 존재하지만 자리가 없는거죠..
리스트뷰의 특성상 height를 강제해서 잡는건 좋은 방법이 아니고 상위 뷰그룹과 weight를 이용해 textview의 공간을 잡아주거나, textview를 상위에 놓고 textview의 height를 wrap_content로 놓거나..
아니면 textview대신 imageview를 사용해 리스트뷰 크기만큼의 아이템없음 이미지를 만들고, visibility 속성을 이용해 데이터가 없으면 listview.setVisibility="View.gone", imageview.setVisibility="View.visilble" 로 코딩상에서 제어해주시고
상위 레이아웃은 FrameLayout을 이용해서 감싸주시면 전화번호부에서 이름으로 검색시 나오는 검색결과가 없을때 나오는 화면 비스무리하게 구현하실 수 있으실 겁니다.
android:id/empty는 android:id/list로 id가 정해진 리스트뷰가 값이 없으면 그 뷰를 GONE 시키고 해당뷰를 VISIBLE 시킵니다. 이게 ListActivity를 사용했을때 편리한 점이죠 즉 ListActivity를 상송해 Activity를 구현하면 ListView를 android:id/list Empty뷰를 android:id/empty로 정하는 행동만으로 리스트 아이템이 하나도 없을때 자동으로 ListView를 Gone 시키고 Empty로 정해진 뷰를 상위로 올리는 행동을 ListActivity 안의 코드에서 자동으로 할 수 있다는 겁니다.




Activity는 ListActivity를 써야 하며
리스트는 android:id="@android:id/list" 로 맞춰주시고
empty로 할 뷰는 android:id="@android:id/empty" 로 id 맞춰주시면 됩니다