可扩展的Listview子计数动态

时间:2014-02-01 03:57:12

标签: android android-listview android-asynctask expandablelistview expandablelistadapter

我正在制作基于Web服务的Android应用程序。我的问题是使用expandableListView的子计数。我必须使用2种不同的Web服务。也就是说,第一个Web服务正在获取父信息。我想要这个,当我点击父第二Web服务必须启动并获取子信息。我的孩子很有弹性。第一位父母有2个孩子,第二位父母有5个孩子。我该如何管理它们。

我正在使用expandablelistviewadapter。在使用此代码“listview.setadapter(adapter)”

之前,此适配器需要子计数

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

4 个答案:

答案 0 :(得分:2)

我没有得到你的任务。在大多数情况下,编写自定义适配器是最常用的方法。所以你是正确的方式。这个适配器应该使用数据结构,你想要什么。

编辑:
这应该工作吗? (Item是动态数据的基类)

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

编辑II:
这条线对你来说也很重要:

adapter.notifyDataSetChanged();

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

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

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

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

我已经就你如何处理这个问题做了一个小样本(表明正在为一个组检索数据,我将该被点击的组显示一个加载的子行,而数据尚不可用)。代码已注释,您可以找到它here

答案 3 :(得分:0)

MvvmCross 6.2版

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

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