Predator's Vision

画像処理、3D点群処理、DeepLearning等の備忘録

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が、確かに目に見えなくはなったけれど、領域はそのまま確保されてしまっているような印象。

何が悪いんだろう。原因究明中。