android - 将对象属性分配给 ListView

标签 android android-layout

我有一个对象的 ArrayList,它具有属性 Object.nameObject.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/

相关文章:

android - 通过 inflate 从合并布局到 RelativeLayout 的 XML 属性

android - 为什么我包含的布局标签返回 null?

android - 指定项目目录 ''》不存在

Android:在同一水平线上将一个按钮向左对齐,第二个按钮向右对齐

java - 在 Android Studio 中重新分配时局部变量会出现下划线

android emulator error permission error for write to sdcard 错误

android - 如何使亚马逊应用内购买 (IAP) 2.0 与 Android R8 兼容

android - 当 listview 滚动时 edittext 设置默认值

android - 如何检测 Android 中 TextView 的重叠和重置位置?

android - 如何为 Kindle Fire 配置 Android 模拟器?