GridViewがsetEmptyViewで消えてくれない/出てきてくれない(未解決)
ListViewやGridViewでは、中身が空の時に表示するビューを設定できるらしい。
そこで、GridViewにも適用してみたのだが、うまく動かなかったというメモ。(解決していない)
具体的には、下記のようにMainActivity内にTextViewとGridViewをレイアウトし、onCreateメソッド内でsetEmptyViewにより設定した。
- action_main.xml
<android.support.v4.widget.SwipeRefreshLayout 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" android:id="@+id/swipeRefreshLayout" tools:context=".MainActivity"> <TextView android:id="@+id/emptyTextView" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_weight="1" android:gravity="center" android:text="No data" /> <GridView android:id="@+id/gridView" android:layout_width="wrap_content" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout>
- MainActivity.java (抜粋)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridView gridView = (GridView) findViewById(R.id.gridView); TextView emptyTextView= (TextView) findViewById(R.id.emptyTextView); gridView.setEmptyView(emptyTextView); }
すると、次のような挙動になった
- GridViewで何も表示するものがないとき
- emptyTextViewが正しく表示された
- GridViewで表示するものがあるとき
- GridViewが表示されない
ここで、action_main.xml内のTextViewとGridViewの順番を逆にしてみたところ次のような挙動になった
- GridViewで何も表示するものがないとき
- emptyTextViewが表示されない
- GridViewで表示するものがあるとき
- GridViewが正しく表示された
すなわち、非表示処理が適用されたViewが、確かに目に見えなくはなったけれど、領域はそのまま確保されてしまっているような印象。
何が悪いんだろう。原因究明中。