将对象属性分配给listview

时间:2011-05-25 10:45:49

标签: android android-layout

我有ArrayList个对象,其中包含属性Object.nameObject.url

我想遍历ArrayList并将Object的“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 个答案:

答案 0 :(得分:10)

1。)你有你的ArrayList:

main_list

2。)在XML文件中创建一个ListView(比如main.xml)并获取其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中包含具有自定义视图的项目,但这对于您在问题中概述的内容不是必需的,并且看起来您已经拥有它。

4.。)将适配器设置为ListView(给定名为'aa'的ArrayAdapter):

livefeed.setAdapter(aa);

现在,ArrayAdapter的工作方式是调用每个Object的toString()方法,并将ListView中的每个TextView设置为此String。因此,在Object的类中创建一个返回其name属性的toString()方法:

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

另请注意,如果您将对象添加到ArrayList,请通知ArrayAdapter您可以相应地更新ListView并进行修改(给定名为'aa'的ArrayAdapter):

aa.notifyDataSetChanged();

如果您需要更多帮助,请与我们联系。与往常一样,如果这回答了您的问题,请检查答案复选标记。

另请注意,您可能希望在您的activity和Object类之间交叉引用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
    }
});