1

我正在尝试将信息动态添加到 ListView。我添加的信息由“设备名称”(主项)和“MAC 地址”(子项)组成。下面是网上的一个例子。注意:我想用设备 1 的名称替换项目 1,用设备 1 的 MAC 地址替换子项目 1,依此类推。这必须动态完成,因为在扫描设备时会填充列表。

有效的 XHTML.

在将其标记为重复之前,我查看了以下问题,但它们并没有帮助我:在 Android 中添加 ListView 子项文本如何在 ListView 中添加子项将项和子项添加到 ListView

通过阅读这些问题,我得出的结论是我需要实现一个自定义ArrayAdapter并覆盖该getView()方法。我创建了一个自定义布局,其中包含两个文本视图:

青色列表.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<TextView
    android:id="@+id/main_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/cyan"/>

<TextView
    android:id="@+id/sub_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/dark_cyan"/>

</LinearLayout>

然后我尝试在我的 Activity 类中创建一个自定义 ArrayAdapter,但我不知道在我的public View getView(final int position, View convertView, ViewGroup parent)方法中放入什么。此外,如果我想要做的只是添加一个 textview 子项,是否需要创建自定义 ArrayAdapter?

4

3 回答 3

2

您的问题的答案是:ArrayAdapter,如果您只想添加项目,则不需要创建自定义。但是,如果您的布局是自定义的,我建议您创建它,因为您将获得对正在显示的项目的大量控制。你没有在你创建你的地方添加你的代码ArrayAdapter,但在你的情况下,我会使用这个构造函数。重要的部分是第三个参数:在您的活动中,您应该将ArrayList添加到 ArrayAdapter 的初始项目存储起来,然后,如果要添加新项目,只需将其添加到适配器ArrayAdapter并调用notifyDataSetChanged()适配器. 只需这样做,您的项目将被添加到布局并显示。如果您需要自己覆盖该GetView方法ArrayAdapter,我推荐这个链接,它帮助我理解了整个事情。

于 2014-01-18T22:07:38.053 回答
1

您是否在谷歌中搜索一些列表视图示例,例如那些教程:

http://www.vogella.com/tutorials/AndroidListView/article.html

http://www.mkyong.com/android/android-listview-example/

我认为他们逐步解释了如何创建列表适配器

于 2014-01-18T22:04:51.773 回答
1

您需要将 getter 方法添加到您的适配器中

YourAdapter ...{

 List<Device> items = new ArrayList<Device>;

 public  List<Device> getItems(){
 return items;
 }

}

然后更改您需要的项目

...{
//for 1s item
Device item = getItems().get(0);
item.setTitle(macAdress)

}

并打电话notifyDataSetChanged给你的适配器

...
yourListView.getAdapter().notifyDataSetChanged();
}

就是这样。现在您可以更改列表数据。

对于你的问题,我认为是的。最好创建自己的适配器,以便以后轻松扩展它。在您的情况下(如果您不想在每次标题更改后更改适配器),您肯定需要自定义一个。干杯

于 2014-01-18T22:11:42.073 回答