2012-03-30 123 views
0

我試圖添加一個列表視圖到我的活動。這裏是假設發生的事情: 用戶點擊一個按鈕,並使用asyncTask從互聯網上獲取數據。該數據應該被添加到列表視圖中。數據來自於在線表格,因此表格中有10行,那麼Listview中應該有10個值。添加到ListView

  1. 但我有一些問題。 首先可以將listview添加到預先存在的佈局,並在飛行中更新?

  2. 列表視圖是否意味着您無法使用setContentView()方法並必須使用setListAdapter?

  3. 如果你有一個已經有兩個按鈕排列的佈局,列表視圖可以添加到它們下面,仍然可以使用setContentView()方法實現嗎?

感謝

編輯

更新的代碼 - 其中一期工程:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.new_sightings); 

    ListView list = getListView(); 
    list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values)); 
    list.setTextFilterEnabled(true); 
} 

XML佈局

?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:orientation = "vertical"> 

    <TableLayout 

android:layout_width = "fill_parent" 
android:layout_height = "wrap_content" 
    > 

    <TableRow 

android:layout_width = "fill_parent" 
android:layout_height = "wrap_content" 
android:layout_weight = "1" 
    > 

    <TextView 

android:id = "@+id/txtTitle" 
android:layout_width = "wrap_content" 
android:layout_height = "fill_parent" 
android:layout_weight = "1" 
android:gravity = "center" 
android:text = "ISS Predictions" 
android:textStyle="bold" 
android:textColor = "#FFFFFF" 
    /> 

    <Button 
android:id="@+id/reloadTen" 
android:layout_height="wrap_content" 
android:layout_width ="fill_parent" 
android:layout_gravity = "right" 
android:layout_weight = "1" 
android:text = "Reload" 
android:textColor = "#FFFFFF" 
android:textStyle = "bold" 
android:background = "#000000" 
/> 

    </TableRow> 

    </TableLayout> 

    <ListView 

android:id = "@+id/android:list" 
android:layout_width = "wrap_content" 
android:layout_height = "wrap_content" 
android:textSize = "15dp" 
android:textStyle = "bold" 

    /> 


</LinearLayout> 

回答

2

1)是的,您可以在佈局中使用ListView,並更新ListView顯示的數據。通常情況下,您會創建一個繼承自ArrayAdapter的類,以彌合基礎數據之間的差距併爲您的ListView生成視圖。

如果要更新顯示的數據,請在適配器上使用add()notifyDataSetChanged()

2)號你叫setListAdapter()只有當你的活動從ListActivity繼承和你有與@android:id/list ID的ListView元素。下面是這樣一個元素的示例:

<ListView android:id="@android:id/list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1"/> 

您仍然使用setContentView()來傳遞所需的XML佈局以供使用。

3)是的,由於上述原因。

+0

我喜歡上面的兩個答案,但需要選擇一個,所以這個人得到它的代碼。謝謝,我也添加了我的代碼,以防其他人遇到同樣的問題 – Katana24 2012-03-30 22:20:05

1

您可以創建一個ListView作爲任何XML佈局的一部分。您不需要擴展ListActivity(我認爲這是您從中獲得創意的地方),但它可以提供幫助。

如果您沒有擴展ListActivity,可以將ContentView設置爲您已經創建的任何佈局(並且包含您的ListView)的ID。

1)是的,您可以靜態或即時(通過LayoutInflater通脹或新的ListView(...))將列表視圖添加到預先存在的佈局。

2)你可以使用setContentView設置一個現有的佈局,不管它是否包含listview。如果它包含一個現有的列表視圖,你需要說findViewById(R.id.myListLayoutId)並確保包含在你的XML中。

3)您可以通過指定您希望使用myExistingView.addView(listView,index)的索引,將listview添加到現有佈局,可以在任何已存在的佈局之前或之後添加。

在任何情況下,您都需要在列表視圖上設置一個適配器(但是您已創建/添加它),其中將包含要填充的數據。您可以隨時將數據添加到適配器,只要您通過調用adapter.notifyDataSetChanged()來通知適配器其數據集已更改。這將導致其更新適配器的列表視圖。