我有ArrayList
个对象,其中包含属性Object.name
和Object.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));
但显然这不是我需要的......
任何帮助将不胜感激:)
答案 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
}
});