2011-05-25 15 views
4

我有一個對象ArrayList具有屬性Object.nameObject.url分配對象屬性到列表視圖

我想通過ArrayList循環並將對象的「名稱」應用於Android ListView。我也想保留Object的其他屬性,以便我可以在onClick方法中調用「url」屬性。

什麼,我現在是這樣的:

main_list.setAdapter(new ArrayAdapter<RomDataSet>(this, android.R.layout.simple_list_item_1, android.R.id.text1, mRoms)); 

但顯然這不是我所需要的...

任何幫助,將不勝感激:)

回答

9

1)你有你ArrayList:

main_list 

2.)在你的XML文件(比如main.xml)中創建一個ListView並獲取其ID。也就是說,給定:

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

做這樣的事情:

ListView livefeed = (ListView)this.findViewById(R.id.liveFeed); 

你的活動範圍內(如果你在別的地方,如OnClickListener是,取代「本」與查看變量作爲一個變量傳遞給OnClickListener)。

3.)定義ArrayAdapter。請注意,它的一個參數(在你的案例中的第三個參數)將是一個TextView ID。這是因爲默認情況下,ArrayAdapter類在ListView中返回一個TextView。如果您重寫ArrayAdapter類,則可以使用自定義佈局在ListView中使用自定義視圖的項目,但對於您在問題中概述的內容而言,這不是必需的,而且您似乎已經掌握了它。

4)設置適配器到ListView(給予ArrayAdapter評爲「AA」):

livefeed.setAdapter(aa); 

現在一個ArrayAdapter的工作原理是它調用每個對象的toString()方法的方式,並設置每個TextView的中ListView到這個String。因此,請在你的對象的類的toString()方法返回其名稱屬性:

public String toString(){return name;} //assuming name is a String 

還要注意的是,如果添加對象到ArrayList,通知你,因此它可以相應地與更新您的ListView一個ArrayAdapter修改(給定ArrayAdapter命名爲'aa'):

aa.notifyDataSetChanged(); 

讓我知道你是否需要任何幫助。像往常一樣,檢查答案複選標記是否回答了您的問題。

另外請注意,有一點你可能希望交叉引用你的活動和對象類之間的ArrayAdapter和ArrayList。將這些字段設置爲靜態是非常有用的。

編輯:

你想也知道如何當你點擊在ListView訪問項目的特定對象。這(給你的ListView名爲livefeed):

livefeed.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int position, long id) { 

    //in here you may access your Object by using livefeed.getItemAtPosition(position) 
    //for example: 
     Object current = livefeed.getItemAtPosition(position); 
     //do whatever with the Object's data 
    } 
}); 
+0

真棒,所以我重寫我的對象的toString()方法,並在列表視圖顯示名稱偉大的工作。現在我仍然困惑的是如何訪問選定的listviewitem(object)的屬性(名稱,url,其他屬性)並說,將它們傳遞給另一個活動?任何幫助將不勝感激:) – jsw 2011-05-25 11:22:15

+0

很高興幫助!所以,據我瞭解,每個對象都有一個URL,並且您希望ListView中的每個項目打開瀏覽器到該URL onClick的權利?另請注意,對象的屬性仍然完好無損。所有的對象仍然在你的ArrayList中。 – Vinay 2011-05-25 11:25:14

+0

好吧,我試圖在示例中簡化它,但每個對象都有一個名稱,URL,描述和圖像。然後我想要將這些數據傳遞給另一個將顯示它的活動:)所以我相當確定我只是需要將它作爲意圖額外傳遞,但是我不確定如何從onClick方法訪問該對象。對不起,你可以告訴我剛剛開發android開發:) – jsw 2011-05-25 11:27:54