在Android中动态添加子项到ListView
Posted
技术标签:
【中文标题】在Android中动态添加子项到ListView【英文标题】:Dynamically adding subitems to ListView in Android 【发布时间】:2014-02-08 05:33:06 【问题描述】:我正在尝试向 ListView 动态添加信息。我添加的信息由“设备名称”(主项)和“MAC 地址”(子项)组成。下面是网上的一个例子。注意:我想用设备 1 的名称替换项目 1,用设备 1 的 MAC 地址替换子项目 1,依此类推。这必须动态完成,因为在扫描设备时会填充列表。
.
在标记为重复之前,我查看了以下问题,但它们没有帮助我:Adding ListView Sub Item Text in android、How to add subitems in a ListView、Adding 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_
android:layout_
android:orientation="vertical" >
<TextView
android:id="@+id/main_item"
android:layout_
android:layout_
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/cyan"/>
<TextView
android:id="@+id/sub_item"
android:layout_
android:layout_
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?
【问题讨论】:
你找到解决方案了吗,如果可能,请上传相同的代码,没有压力:) 【参考方案1】:您的问题的答案是:否,如果您只想添加项目,则无需创建自定义ArrayAdapter
。但是,如果您的布局是自定义的,我建议您创建它,因为您将获得对正在显示的项目的大量控制。您没有在创建ArrayAdapter
的位置添加代码,但在您的情况下,我会使用this 构造函数。重要的部分是第三个参数:在您的活动中,您应该存储一个 ArrayList
以及您要添加到 ArrayAdapter 的初始项目,然后,如果您想添加一个新项目,只需将其添加到 @987654326 @ 并在您的适配器上调用 notifyDataSetChanged()
。只需这样做,您的项目将被添加到布局并显示。如果您需要为自己的ArrayAdapter
覆盖GetView
方法,我推荐这个link,它帮助我理解了整个事情。
【讨论】:
很高兴为您提供帮助,一旦您最终选择了对您最有帮助的答案,请不要忘记接受它,这样其他用户也可以知道对您最有帮助的答案。【参考方案2】:你是否在谷歌中搜索一些列表视图示例,比如那些教程:
http://www.vogella.com/tutorials/AndroidListView/article.html
http://www.mkyong.com/android/android-listview-example/
我认为他们逐步解释了如何创建列表适配器
【讨论】:
那么除了自定义适配器,没有办法添加子项吗?这似乎很奇怪,因为在 Eclipse 预览中您可以看到“子项”,所以我认为会有一种不需要构建自定义适配器的方式来添加一个:(【参考方案3】:您需要将 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();
就是这样。现在您可以更改列表数据了。
对于你的问题,我认为是的。最好创建自己的适配器,以便以后轻松扩展它。在您的情况下(如果您不想在每次标题更改后更改适配器),您肯定需要自定义一个。干杯
【讨论】:
以上是关于在Android中动态添加子项到ListView的主要内容,如果未能解决你的问题,请参考以下文章
将 Text 小部件添加到其子项映射到 Flutter 的 ListView?
在每个子项中添加带有EditTexts的ListView - Android Studio
在android中,当我按了listview中的一个子项时,利用ContextMenu弹出菜单,那怎么获取这个子项的数据呢?