2014-01-18 94 views
1

我想动态地添加信息到ListView。我添加的信息包括“设备名称”(主要项目)和“MAC地址”(子项目)。下面是一个来自在线的例子。注意:我想用设备1的名称替换项目1,用设备1的MAC地址替换子项目1,等等。这必须动态完成,因为在扫描设备时列表正在填充。在Android中动态添加子项目ListView

Valid XHTML

在此之前被标记为重复,我已经看过了下面的问题,他们并没有帮助我:Adding ListView Sub Item Text in AndroidHow to add subitems in a ListViewAdding Items and Subitems to a ListView

结论我来通过阅读这些问题是我需要实施自定义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> 

然后我尝试创建我的活动类的定制ArrayAdapter,但我失去至于什么把我的public View getView(final int position, View convertView, ViewGroup parent)方法。此外,正在创建一个自定义的ArrayAdapter,如果我所要做的只是添加一个textview子项目?

+0

您是否发现解决方案可以请您上传相同的代码,如果可能的话,没有压力:) –

回答

2

答案您的问题是:没有,你不需要创建一个自定义ArrayAdapter如果你只是想添加项目。然而,如果您的布局是自定义的,我建议您创建它,因为您可以很好地控制所显示的项目。您没有在创建ArrayAdapter的地方添加代码,但在您的情况下,我会使用this的构造函数。重要的部分是第三个参数:在您的活动中,您应该将ArrayList与您添加到ArrayAdapter的初始项目一起存储,然后,如果您想添加新项目,只需将其添加到ArrayAdapter并拨打notifyDataSetChanged()在你的适配器上。只需做到这一点,您的项目将被添加到布局并显示。如果您需要替代您自己的ArrayAdapter覆盖GetView方法,我推荐这个link,它帮助我理解整个事情。

+0

谢谢你的帮助反应! –

+0

很高兴为您提供帮助,一旦您最终选择了最能帮助您的答案,请不要忘记接受它,这样其他用户也可以知道最能帮助您的是什么。 – nKn

1

,您在搜索一些的ListView例如,在谷歌喜欢这些教程:

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

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

我觉得他们一步解释一步如何创建一个列表适配器

+0

那么除了自定义适配器,还有没有办法添加子项?这看起来很奇怪,因为在eclipse预览中你可以看到“subitem”,所以我认为会有一个不需要构建一个自定义适配器的方式来添加一个:( –

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(); 
} 

完蛋了。现在您可以更改您的清单数据。

对于你的问题,我想是的。最好是创建自己的适配器,以便稍后执行它的简单可能性。在你的情况下(如果你不想在每个标题改变后改变你的适配器),你需要自定义一个。欢呼声