리스트뷰에서 어댑터가 비어있는경우, 내용없다고 표시 띄어주기
참고:
Udacity
머티리얼 디자인 가이드(Empty States)
setEmptyView()
[띄어줄 TextView구현하기]
리스트뷰에서 가져올 결과가 없을 시 띄어줄 TextView를 같은 계층에 구현해준다. rootview는 하나만 있어야하므로 이 둘의 뷰를 RelativeLayout으로 감싸준다. cf) multiple root tags
[리스트뷰만 있는 코드]
[비어있는 상태를 표시해 줄 TextView와 루트뷰인 RelativeRayout]
주목해서 봐야할 속성은, TextView안의 layout_centerInParent이다.
layout_XXX속성을 조합하지 않고, layout_centerInParent속성을 true로 지정해주면 뷰가 부모뷰의 정중앙에 위치하게된다.
그리고, TextView안에 text속성을 지정해주지 않은점도 눈여겨봐놓자.
이제 리스트뷰를 뿌려주는 액티비티 자바파일로 돌아가서, 멤버변수 TextView를 지정해주자.
onCreate메서드에서 setEmptyView메서드를 사용해서, 어댑터가 비어있는경우 위에서 지정한 TextView가 화면에 뜨도록 구현해준다.
조건문에 isEmpty()를 사용해서 어댑터가 비어있는지 확인할 필요가 없다. setEmptyView메서드 자체가 어댑터가 비어있는지 확인해주기 때문이다.
TextView안에 text속성을 지정해주지 않은 이유는 다음과 같다. 앱을 켜서 데이터를 최초로 불러오는 경우, 불러올 수 있는 데이터가 있음에도 불구하고 처음 데이터를 불러오는것이기 때문에 어댑터가 비어있기 때문이다. 이를 방지하기위해 레이아웃파일안에서 텍스트를 지정해주지 않았다.(레이아웃의 TextView에 text속성을 지정해주고 앱을 실행시켜보면 왜 속성을 지정해주지 않았는지 알 수 있을것이다.)
코드 상 데이터를 불러오고 난 다음 실행되는 메서드 내에서 텍스트를 지정해주면된다. 로더를 사용해서 데이터를 불러오는 경우 onLoadFinished() 내에 setText를 사용해 원하는 문자열을 띄어주면된다.
Udacity
머티리얼 디자인 가이드(Empty States)
setEmptyView()
[띄어줄 TextView구현하기]
리스트뷰에서 가져올 결과가 없을 시 띄어줄 TextView를 같은 계층에 구현해준다. rootview는 하나만 있어야하므로 이 둘의 뷰를 RelativeLayout으로 감싸준다. cf) multiple root tags
[리스트뷰만 있는 코드]
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp" />
[비어있는 상태를 표시해 줄 TextView와 루트뷰인 RelativeRayout]
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".EarthquakeActivity"
>
<ListView
android:id="@+id/list"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp"
/>
<TextView
android:id="@+id/empty_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:textAppearance="?android:textAppearanceMedium"
/>
</RelativeLayout>
주목해서 봐야할 속성은, TextView안의 layout_centerInParent이다.
android:layout_centerInParent="true"
layout_XXX속성을 조합하지 않고, layout_centerInParent속성을 true로 지정해주면 뷰가 부모뷰의 정중앙에 위치하게된다.
그리고, TextView안에 text속성을 지정해주지 않은점도 눈여겨봐놓자.
이제 리스트뷰를 뿌려주는 액티비티 자바파일로 돌아가서, 멤버변수 TextView를 지정해주자.
TextView mEmptyStateTextView;
onCreate메서드에서 setEmptyView메서드를 사용해서, 어댑터가 비어있는경우 위에서 지정한 TextView가 화면에 뜨도록 구현해준다.
mEmptyStateTextView = (TextView) findViewById(R.id.empty_view);
listView.setEmptyView(mEmptyStateTextView);
조건문에 isEmpty()를 사용해서 어댑터가 비어있는지 확인할 필요가 없다. setEmptyView메서드 자체가 어댑터가 비어있는지 확인해주기 때문이다.
TextView안에 text속성을 지정해주지 않은 이유는 다음과 같다. 앱을 켜서 데이터를 최초로 불러오는 경우, 불러올 수 있는 데이터가 있음에도 불구하고 처음 데이터를 불러오는것이기 때문에 어댑터가 비어있기 때문이다. 이를 방지하기위해 레이아웃파일안에서 텍스트를 지정해주지 않았다.(레이아웃의 TextView에 text속성을 지정해주고 앱을 실행시켜보면 왜 속성을 지정해주지 않았는지 알 수 있을것이다.)
코드 상 데이터를 불러오고 난 다음 실행되는 메서드 내에서 텍스트를 지정해주면된다. 로더를 사용해서 데이터를 불러오는 경우 onLoadFinished() 내에 setText를 사용해 원하는 문자열을 띄어주면된다.
mEmptyStateTextView.setText(R.string.emtpy_list);
댓글
댓글 쓰기