在Android中动态添加子项到ListView

时间:2014-01-18 21:58:59

标签: android listview android-arrayadapter subitem

我正在尝试动态地向ListView添加信息。我添加的信息包括“设备名称”(主项)和“MAC地址”(子项)。以下是在线示例。注意:我想用设备1的名称替换项目1,用设备1的MAC地址替换子项目1,依此类推。这必须动态完成,因为在扫描设备时正在填充列表。

Valid XHTML

在此之前被标记为重复,我查看了以下问题并且他们没有帮助我:Adding ListView Sub Item Text in AndroidHow to add subitems in a ListViewAdding Items and Subitems to a ListView < / p>

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

cyan_list.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)方法中放入了什么。另外,正在创建一个自定义ArrayAdapter,如果我要做的就是添加textview子项吗?

3 个答案:

答案 0 :(得分:2)

您的问题的答案是:,如果您只想添加项目,则无需创建自定义ArrayAdapter。但是,如果您的布局是自定义的,我建议您创建它,因为您将获得对所显示项目的大量控制权。您没有在创建ArrayAdapter的位置添加代码,但在您的情况下,我会使用this构造函数。重要的部分是第三个参数:在您的活动中,您应该存储ArrayList以及您要添加到ArrayAdapter的初始项目,然后,如果要添加新项目,只需将其添加到ArrayAdapter并在您的适配器上调用notifyDataSetChanged()。只需这样,您的项目就会被添加到布局中并显示出来。如果您需要覆盖自己GetView的{​​{1}}方法,我建议使用此link,这有助于我理解整个事情。

答案 1 :(得分:1)

你在google中搜索一些listview示例,就像那些教程一样:

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

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

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

答案 2 :(得分: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();
}

多数民众赞成。现在您可以更改列表数据。

对于你的问题,我想是的。最好是创建自己的适配器,以便稍后可以简单地执行它。在你的情况下(如果你不想在每个标题更改后更改你的适配器)你deffinetly需要自定义。干杯