在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弹出菜单,那怎么获取这个子项的数据呢?

从android中的其他类动态地将对象添加到listview

我无法使用多个按钮将子项添加到 ListView

Android-ListView-ArrayAdapter