4

在我的OncreateView()设置中,当我第一次加载页面时正在工作的适配器。当我转到另一个页面并进行更改然后回到这个片段时它不起作用adapter.notifyDatasetchanged()

 @Override
public void onStart() {
    super.onStart();
    groupItem.clear();
    childItem.clear();
    List<String> child_Category;child_Category=new ArrayList<String>();
    groupItem = obj_Listdatabase.fetchcategory();
    childItem.clear();
    ListIterator<String> iterator = groupItem
            .listIterator();
    while (iterator.hasNext()) {
        String categoryname = iterator.next();
        child_Category = new ArrayList<String>();
        child_Category = obj_Listdatabase
                .fetchchildlist(categoryname);
        childItem.add(child_Category);
    }

    adapter.notifyDataSetChanged();
}
4

2 回答 2

0

海我得到了这个的输出:

    groupItem.addAll(obj_Listdatabase.fetchcategory());

而不是这个

   //groupItem = obj_Listdatabase.fetchcategory();

因为我更改了该适配器的赋值语句(=)中的引用。所以我使用 addAll() 方法仅存储值而不是引用。

于 2013-08-10T07:39:18.177 回答
0

你应该更干净地缩进你的代码,永远不要使用多个“;” 例如在同一行。而且您绝对可以使用 BaseExpandableListAdapter 问题在其他地方..

您还应该注意到 onCreate 视图更适合“创建视图”,因此所有适配器的东西都应该在其他地方,如您需要的 onViewCreated 或 onActivityCreated(这只是一些建议)


我假设您的适配器在 Fragment 中,因为您使用GetActivity()并且在适配器的构造函数中,您传递了对活动(上下文)、组列表和子列表的引用.. 好的

我们假设您正在使用片段 onStart。来自官方文档:

Called when the Fragment is visible to the user. This is generally tied to Activity.onStart of the containing Activity's lifecycle. 

所以通常这个方法是在 onViewCreate、onViewCreated 等之后调用的,至少在你的代码第一次运行时。所以这没关系

您是否尝试使用adapter.notifyDataSetInvalidate()然后执行adapter.notidyDataSetChanged


最后一件事,因为您实际上是通过构造函数将数据传递给适配器,所以当您更新列表时,适配器如何知道这些更改?您的列表是全局的(静态的)吗?

如果没有,在执行 adapter.notifyDataSetChanged() 之前,您应该使用一些 setter 将列表(组和子级)传递给适配器。

祝你好运

于 2013-07-05T07:53:07.483 回答