ListView數據空值顯示

當ListView爲空時需要設置一些View來顯示提示內容。ListView有一個公開的方法——setEmptyView(View v)——用來設置ListView爲空時的內容。可是這個方法的設置是有限制的,就是設置的View必需在當前的View hierarchy裏,亦即這個View需要被add到當前Viewhierarchy的一個結點上,如果沒有添加到結點上的話,調用setEmptyView(View v)是沒有任何效果的。
它的過程大概是:

    ListView listview = (ListView) findViewById(R.id.list);  
    View emptyView = findViewById(R.id.empty);  
    ViewGroup parentView = (ViewGroup) listview.getParent();  
    parentView.addView(emptyView, 2); // 你需要在這兒設置正確的位置,以達到你需要的效果。  
    listview.setEmptyView(emptyView);  

注意:如果你直接在XML中包含了emptyView,那麼也就不需要再額外添加到Viewhierarchy中了,比如你的Layout是:

 <?xml version="1.0" encoding="UTF-8"?>        
        <LinearLayout  
            xmlns:android="http://schemas.android.com/apk/res/android"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            android:gravity="center_vertical"  
            android:orientation="vertical" >  

            <include layout="@layout/fixed_headerview" />  

            <ListView  
                android:id="@+id/list"  
                android:layout_width="match_parent"  
                android:layout_height="match_parent"  
                android:layout_weight="1"  
                android:drawSelectorOnTop="false"  
                android:fastScrollEnabled="true"  
                android:textSize="18sp" />  

            <TextView  
                android:id="@+/empty"  
                android:layout_width="match_parent"  
                android:layout_height="match_parent"  
                android:layout_weight="1"  
                android:gravity="center"  
                android:padding="15dip"  
                android:text="@string/text_no_song"  
                android:textSize="22sp"  
                android:visibility="gone" />  
        </LinearLayout>  

那你只需要以下的代碼就可以了:

    ListView listview = (ListView) findViewById(R.id.list);  
    View emptyView = findViewById(R.id.empty);  
    listview.setEmptyView(emptyView); 

補充:Android的setEmptyView這個思路有點侷限性。
我碰到的需求就比較特殊,頁面分爲新聞頭部內容和評論兩部分。新聞頭部內容始終顯示,下面的評論部分若沒有則用CusEmptyView填充。但Android提供的setEmptyView方式是整個ListView替換掉,它就與我的始終顯示新聞頭部內容的需求衝突了。我是這樣解決的,把新聞頭部內容和CusEmpty作爲兩個Headview加入到ListView中,然後在listView的Adapter中增加數據改變的回調,在業務層實現CusEmptyView的隱藏與顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章