2013-07-09 95 views
3

我已經在ListView的頂部設置了一個TextView的FrameLayout。現在,在MainActivity中,執行一些代碼後,我檢查ListView是否爲空。如果是,我顯示TextView,如果沒有,我刪除TextView在Android中動態添加和刪除TextView

的代碼如下:

以下是的main.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/flMain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tvAddItem" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Add some subjects" 
     android:textSize="20sp" /> 

    <ListView 
     android:id="@+id/ItemsList" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" /> 

</FrameLayout> 

在MainActivity類,我請執行下列操作:

MainActivity.java

TextView tvNoItem = (TextView) findViewById(R.id.tvAddItem); 
ListView subListView = (ListView) findViewById(R.id.itemsList); 
FrameLayout fl = (FrameLayout) findViewById(R.id.flMain); 

ArrayList<Item> itemsList; 

//some code 

if(itemsList.isEmpty()) { 
    fl.addView(tvNoItem); 
} else { 
    fl.removeView(tvNoItem); 
} 

現在,當我運行它並將一些項目添加到列表中時,確實會刪除TextView(tvNoItem)。但我看到的只是一個空白列表 - 列表項不可見。 [順便說一句,名單工作正常。當我從main.xml中刪除TextView時,我可以看到所有列表項。]請幫助。

+1

爲什麼不把視圖去加入textviews? 'textView.setVisibility(View.GONE)' – Neoh

+0

我試過了。它做同樣的事情。我得到一個空白的活動。 –

回答

3

爲什麼不使用ListViewemptyView選項。

這是一個很好的帖子,當你的適配器爲空時顯示空視圖。當適配器的源代碼爲空時,它將自動顯示。

Android – ListView => setEmptyView()

你並不需要檢查你的數據源(ArrayList)是否爲空,Android框架將處理所有的隱藏和顯示的實現。

請確保在致電setAdapter()ListView之前致電setEmptyView()

0

改爲添加/刪除嘗試更改Vissibility狀態。

1

而不是添加和刪除TextView嘗試隱藏並顯示它。使用View.VISIBLE和VIEW.GONE屬性:

if(itemsList.isEmpty()) { 
    tvNoItem.setVisibility(View.VISIBLE); 
} else { 
    tvNoItem.setVisibility(View.GONE); 
} 

希望有所幫助。

+0

它是否通過將其可見性設置爲去除來從佈局的子項中移除特定元素? –

10
txtview.setVisibility(View.GONE) ; 
    txtview.setVisibility(View.VISIBLE) ; 
0

其實是有技巧&技巧,以顯示當listView是空的視圖

<FrameLayout 
android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" > 

<ListView 
android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

<ViewStub 
android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout="@layout/empty" /> 
</FrameLayout> 

一個ViewStub是一種無形的,零大小視圖可用於懶洋洋地膨脹在運行時佈局資源。僅當ViewStub可見性將更改爲View.VISIBLE時,佈局@layout/empty纔會充氣。一旦@layout/empty視圖層次結構被誇大,它將替換全局佈局中的ViewStub

ViewStub documentation

Source

0

1)首先,有一些問題,你的代碼。您的tvNoItem已在xml佈局中定義,因此您不應再添加它。您只添加動態創建的視圖,例如

textView tv = new TextView(this); 
... //customize your text view 
fl.addView(tv); 

你真的應該只設置你的TextView XML與android:visibility="gone",讓當你想要它是可見的。

2)使用LinearLayout而不是FrameLayout如果你想在你的列表視圖頂部的textview。在你的列表視圖中,將android:layout_height="0dip"更改爲android:layout_height="wrap_content",並刪除layout_weight。

1
rowtxt.setText("Hello" + ++i);//for adding textview 
rltv.addView(rowtxt); 

rowtxt.setVisibility(View.GONE);//use for disable textview 
      rltv.removeViewAt(--i); 
0

之前在佈局動態獲取的觀點先復位,即

LinearLayout lc2 = (LinearLayout) findViewById(R.id.leftcode1); 
LinearLayout lc3 = (LinearLayout) findViewById(R.id.lcvalue1); 

lc2.removeAllViews(); 
lc3.removeAllViews(); 

以上線路爲我的工作,以避免重複動態地在線性佈局