2014年8月21日木曜日

setEmptyViewを使用する際の注意点(設定しても何も起こらない件)



メインレイアウトの中にListViewを配置して、setEmptyViewが反応しない…ということがあったのでメモしますφ(・ω・`)カリカリ

■ xml側の記述

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/MainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >


   <TextView
          android:layout_width="match_parent"
           android:layout_height="wrap_content"
          android:text="@string/employee_name" />

   <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />



</LinearLayout>




■ ソース側の記述
ListView list = view.findViewById(R.id.list);

/* その他もろもろの設定処理 省略します */

//んで最後にadapterが空になった時に表示するViewを設定すると…

LinearLayout.LayoutParams params = new LinerLayout.LayoutParams( ViewGroup.LayoutParams.MATH_PARENT, ViewGroup.LayoutParams.MATH_PARENT );
TextView text = new TextView( getActivity() );
text.setText( "ないよ~~~~" );
text.setLayoutParams(params);

list.setEmptyView( text );


設定すると…でてくるはず!!…って あれ…何もおこらない(・ω・?) ん?なぜ?
先輩に送ってくれたサイトをちらちら…
http://qiita.com/ryugoo/items/b8b735e3c441c65bdaa8
このサイトでヒントをいただきましたm(。_。)m
アリガトウゴザイマス。
…んで修正修正とφ(。_。)カタカタ

■ xml側の記述

とりあえずListViewの親にFrameLayoutを設置していれこにします。
 <TextView
          android:layout_width="match_parent"
           android:layout_height="wrap_content"
          android:text="@string/employee_name" />

  <FrameLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:layout_weight="3" >

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>


■ ソース側の記述
LinearLayout.LayoutParams params = new LinerLayout.LayoutParams( ViewGroup.LayoutParams.MATH_PARENT, ViewGroup.LayoutParams.MATH_PARENT );
TextView text = new TextView( getActivity() );
text.setText( "ないよ~~~~" );
text.setLayoutParams(params);

list.setEmptyView( text );


//親ビューにemptyViewを追加します。
 ((ViewGroup)list.getParent()).addView( text );//←ここにこれを追加するだけ!!


やったやった!!きたきた!!(@^ω^)
後、記述の注意点としてsetEmptyViewを呼び出し後にかならず親ビューへセットしてください。
 じゃなきゃエラーでます。(・ω・;)でちゃいますよ。
 んと、毎回毎回TextViewを作成するために記述するのがめんどくさかったのでListViewを継承カスタムViewを作成してその中で作るように変えました。
(・_・)もっといい方法ないかなぁ。 以上です。m(._.)m

0 件のコメント:

コメントを投稿