2014-11-04 49 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类)。

,如果你不明白的地方就发表评论或者如果我错过理解你:)