我有一个对象的 ArrayList
,它具有属性 Object.name
和 Object.url
。
我想遍历 ArrayList 并将对象的“名称”应用到 android ListView。我还想保留对象的其他属性,以便我可以在 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);
在您的 Activity 中(如果您在其他地方,例如 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。因此,在您的对象类中创建一个 toString() 方法,该方法返回其名称属性:
public String toString(){return name;} //assuming name is a String
另请注意,如果您将对象添加到 ArrayList,请通知您拥有的 ArrayAdapter,以便它可以相应地使用修改更新您的 ListView(给定一个名为“aa”的 ArrayAdapter):
aa.notifyDataSetChanged();
如果您需要更多帮助,请告诉我。一如既往,如果这回答了您的问题,请勾选答案复选标记。
另请注意,有时您可能希望在 Activity 和对象类之间交叉引用 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
}
});
关于android - 将对象属性分配给 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6123214/