将对象属性分配给listview

问题描述

| 我有一个对象“ 0”,其属性为“ 1”和“ 2”。 我想遍历ArrayList并将对象的\“ name \”应用于Android ListView。我还希望保持Object \的其他属性完好无损,以便可以在onClick方法调用\“ url \”属性。 我现在所拥有的是:
main_list.setAdapter(new ArrayAdapter<RomDataSet>(this,android.R.layout.simple_list_item_1,android.R.id.text1,mRoms));
但显然那不是我所需要的... 任何帮助,将不胜感激 :)     

解决方法

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之类的其他地方,请将\“ this \”替换为作为变量传递给OnClickListener的View变量)。 3.)定义您的ArrayAdapter。请注意,其参数之一(在您的情况下为第三个参数)将是TextView ID。这是因为默认情况下,ArrayAdapter类在ListView中返回TextView。如果您重写ArrayAdapter类,则可以使用自定义布局在ListView中包含具有自定义View的项,但这对于您在问题中概述的内容不是必需的,并且看起来您已经拥有了它。 4.)将适配器设置为ListView(给定名为\'aa \'的ArrayAdapter):
livefeed.setAdapter(aa);
现在,ArrayAdapter的工作方式是调用每个Object的toString()方法,并将ListView中的每个TextView设置为此String。因此,在Object \的类中创建toString()方法以返回其name属性:
public String toString(){return name;} //assuming name is a String
还要注意,如果将对象添加到ArrayList,请通知ArrayAdapter拥有该对象,以便它可以相应地通过修改来更新ListView(给定名为\'aa \'的ArrayAdapter):
aa.notifyDataSetChanged();
让我知道您是否需要更多帮助。与往常一样,如果答案已回答您的问题,请选中答案复选标记。 还要注意,有时您可能希望在活动和Object类之间交叉引用ArrayAdapter和ArrayList。将这些字段设置为静态非常有用。 编辑: 您还想知道如何在单击ListView中的项目时访问特定的Object。在这里(假设您的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
    }
});