2014-11-04 48 views
0

我有一個ListActivity,它當前正在顯示一個Data類型的數據對象列表。這些類型的數據對象具有自定義數據:ListActivity值是對象,想要顯示字符串

String title; 

以下是我在ListActivity構造:

List<Data> values = dataInterface.getAllData(); 

ArrayAdapter<Data> adapter = new ArrayAdapter<Data>(this, 
    android.R.layout.simple_list_item_1, values); 
    setListAdapter(adapter); 

屏幕上的應用程序顯示沒有錯誤的所有數據對象。

的問題是,每個列表項顯示的文本是:

[email protected] 
[email protected] 

等。

我明白這些是Data對象的對象ID。相反,我想顯示Data.title中的字符串。我無法弄清楚如何做到這一點。

+2

我認爲數據類中必須有getter和setter方法嗎? – 2014-11-04 04:59:53

+0

如果你有Model類,那麼需要使用'yourArrayList.get(position).getTitile()'。如果你沒有任何這樣的類需要使用'toString()'。 – Piyush 2014-11-04 05:02:37

回答

2

如果你不想使用自定義適配器,然後在Data類中定義的方法public String toString()如下:

public String toString { 
    return title; 
} 

當它表示ListView中的對象時,它將被ArrayAdapter使用。

+0

這工作完美。這被認爲是黑客? – jpittis 2014-11-04 05:07:18

+0

IMO不,它的目的是toString()返回對象的表示形式爲String。 Android的預定義適配器無法準確知道要顯示的對象的屬性,因此它們依靠'toString()'顯示對象本身。如果未設置'toString()',則使用來自父對象類的實現,即ClassName @ instanceId。如果您想更好地表示對象,請定義一個自定義適配器,並在'getView()'方法中執行所需的操作。 – 2014-11-04 05:11:46

+0

我不認爲這是最好的方式,因爲有時你會在你的班級中有多個字符串,比如「作者姓名」和「標題」(沒有冒犯性,我向你提供了答案)。 – 2014-11-04 05:14:31

0

在您的適配器:

holder.myTextview.setText(getItem(position).getTitle()); 

點是在getItem(position).getTitle(),因爲你的自定義適配器擴展ArrayAdapter<Data>getItem(position)將返回Data一個實例。

之後,你只需要獲得使用getTitle();Data標題(取決於你的二傳手 - 在你吸氣Data類)。

,如果你不明白的地方就發表評論或者如果我錯過理解你:)