可扩展的列表视图子项动态计数

Posted

技术标签:

【中文标题】可扩展的列表视图子项动态计数【英文标题】:Expandable Listview Child count Dynamically 【发布时间】:2014-02-24 23:08:28 【问题描述】:

我正在制作一个基于 Web 服务的 android 应用程序。我的问题是可扩展列表视图的孩子数。我必须使用 2 种不同的网络服务。即,第一个 Web 服务正在获取父信息。我想要这个,当我单击父第二个 Web 服务必须启动并获取子信息时。我的孩子人数是灵活的。第一个父母有2个孩子,第二个父母有5个孩子。我该如何管理它们。

我正在使用可扩展列表视图适配器。在使用此代码“listview.setadapter(adapter)”之前,此适配器需要子计数

所以我想使用动态儿童计数。当我点击父对话框时,将显示和孩子从服务器获取。

【问题讨论】:

你能发布更多代码吗? 【参考方案1】:

我不明白你的问题。在大多数情况下,编写自定义适配器是要走的路。所以你走对了。这个适配器应该使用你想要的数据结构。

编辑: 这应该有效吗? (Item 是我的动态数据基类)

public class MyBaseListAdapter implements ListAdapter 
    List<? extends Item> items;
    @Override
    public int getCount() 
        return items.size();
    

编辑二: 这条线也可能对你很重要:

adapter.notifyDataSetChanged();

您应该在更改数据时尝试同步或阻止访问

【讨论】:

我必须使用 2 个不同的 wcf 网络服务。第一的;活动 oncreate,第二个;当我单击 expandablelistView 的父级时。我想从第二个服务中动态计算子项以扩展列表视图。【参考方案2】:

你应该给孩子计数作为你为每个父母所拥有的,即0。当点击父母时,为点击的父母获取孩子,更新你的数据结构,然后调用adapter.notifyDataSetChanged();

【讨论】:

【参考方案3】:

所以我想使用动态儿童计数。当我单击父对话框时 将显示和孩子从服务器获取。

子数量没有什么动态的,您只需要在子数据可用时更新适配器。正如其他答案所指出的,您需要实现一个自定义适配器。基本流程是:

进行第一次 Web 服务调用以检索组数据。 当该调用完成时,构建您的自定义适配器实例,其中子计数 (getChildrenCount()) 为零(因为我们没有任何数据)。理想情况下,您将向用户显示某种指示符,表明正在检索数据。您谈到了一个对话框,我会(我的示例基于此)使用指示正在加载的自定义子行(在这种情况下,您将从 getChildrenCount() 返回 1)。 在OnGroupClickListener 中调用Web 服务以检索特定点击组的数据。您还需要确保只有第一次组点击才会发出获取数据的请求。 当组的子数据可用时更新适配器(或使其获取新数据)并调用notifyDataSetChanged()

我已经制作了一个关于如何处理此问题的小示例(以表明正在为一个组检索数据,我创建了该单击组以在数据尚不可用时显示正在加载的子行)。代码有注释,可以找到here。

【讨论】:

【参考方案4】:

MvvmCross 6.2版

_myExpandList = view.FindViewById<ExpandableListView>(Resource.Id.yourExpandedList);
int ExpandViewCount = _myExpandList.Adapter.Count; 

我整天都在寻找这个,并且对所有答案越来越恼火。这似乎是最简单的解决方案。

【讨论】:

以上是关于可扩展的列表视图子项动态计数的主要内容,如果未能解决你的问题,请参考以下文章

如何将子项动态添加到可展开的列表视图中。?

可扩展列表视图回收问题

当父母在Android中折叠时如何更改可扩展列表视图子项的视图?

可扩展列表视图默认选择

具有可扩展列表视图项的Android列表视图

Xamarin 表单中具有不同子项的可扩展 ListView